跳到正文
Elaine Blog
返回

RabbitMQ 入门:交换机、队列与路由

分布式系统、协调与消息

RabbitMQ 中,生产者把消息发布到交换机(Exchange),不是直接写业务队列。交换机按绑定(Binding)与路由键把消息送入一个或多个队列,消费者再从队列取走消息。

Table of contents

Open Table of contents

四个核心对象

对象作用
Exchange根据规则路由消息,本身通常不长期存消息
Queue保存等待消费的消息
Binding连接交换机与队列,并携带匹配规则
Routing key发布时提供的路由字符串

direct 做精确匹配,topic 用点分词和通配符匹配,fanout 忽略路由键广播,headers 按头字段匹配。默认交换机有特殊的按队列名路由规则,但新手也应显式画出拓扑。

Publisher → orders.exchange --order.paid--> billing.queue → Consumer
                          └--order.*-----> audit.queue

可确认的链路

可靠发送至少需要持久交换机、持久队列、持久消息和 Publisher Confirm。Confirm 表示 Broker 接受了发布,不表示消费者已完成业务。无法路由的消息还需使用 mandatory 与 return 回调,否则它可能被确认但没有进入任何队列。

消费者关闭自动确认,在本地事务成功后 ack;可恢复失败可 nack/reject 并进入受控重试,确定性坏消息送死信队列。不要无限 requeue=true,它会形成热循环。

消息正文使用带版本的事件契约:

{"eventId":"evt-1","type":"OrderPaid","schemaVersion":1,"orderId":"o-9"}

消费者以 eventId 做幂等。运行实验室的重复消费测试下载

mvn -Dtest=DistributedMechanismsTest#outboxAndIdempotentConsumerSurviveDuplicates test

参考 RabbitMQ Publisher 文档核对发布确认和不可路由消息处理。

下一步

继续阅读08-13 RabbitMQ 可靠性与高级能力,补齐死信、延迟、顺序和幂等。


分享这篇文章:

上一篇
Seata 工作原理与源码主线
下一篇
RabbitMQ 可靠性与高级能力