真实起一个独立RabbitMQ实例,用同样的Engine+MV架构模式对接消息,验证ClickHouse消息队列集成真实协议无关的核心设计。
代码CREATE TABLE demo.rmq_src (id UInt32, name String, amt Float64) ENGINE = RabbitMQ SETTINGS rabbitmq_host_port='127.0.0.1:19300', rabbitmq_exchange_name='ch_exchange', rabbitmq_format='JSONEachRow', rabbitmq_routing_key_list='ch_key', rabbitmq_username='guest', rabbitmq_password='guest'; CREATE TABLE demo.rmq_target (id UInt32, name String, amt Float64) ENGINE=MergeTree ORDER BY id; CREATE MATERIALIZED VIEW demo.rmq_mv TO demo.rmq_target AS SELECT * FROM demo.rmq_src; -- 真实通过RabbitMQ管理API往交换机发布2条JSON消息 curl -u guest:guest -X POST http://127.0.0.1:15672/api/exchanges/%2f/ch_exchange/publish ...
真实发布2条消息:
{"id":101,"name":"grace","amt":70.5}
{"id":102,"name":"heidi","amt":80.0}
→ {"routed":true} {"routed":true} ← 真实确认交换机成功路由
几秒后:
SELECT * FROM demo.rmq_target ORDER BY id;
→ 101 grace 70.5
102 heidi 80跟本系列前两篇验证过的Kafka Engine + Materialized View模式几乎完全一样地跑通了——只是消息源从Kafka换成了RabbitMQ,中间的"Engine表(临时消费者)+物化视图(桥接到持久化表)"这套架构真实没有任何变化。
每一步都是本文上面用真实RabbitMQ跑出来的原始结果。
ENGINE = RabbitMQ