记录rabbitMQ的广播队列的错误使用导致未能正确广播的问题

发布时间 2023-12-14 18:08:48作者: zeromi

背景说明:

有3个服务S1、S2、S3

现在服务S1需要发布消息到广播交换机E,并建立了两个普通队列Q1,Q2,将其绑定到广播交换机E上

服务S2和服务S3同时监听队列Q1,Q2

本意是,服务S1通过广播交换机E把消息同时推送给服务S2和S3

后面测试时,同事发现,服务S2和服务S3都只接收到了部分消息,而不是全部。

 

后面发现,广播交换机的广播对象是队列,而不是队列的消费者,而队列里面的一条消息只会发送给一个监听端,而不是群发,这就导致服务S2和服务S3均不能接收到全部消息。

 

rabbitMQ的设计都是以队列为基础,队列的消息分发只有轮询和公平分发两种策略,而广播/直连/主题交换机这些策略,仅针对交换机和队列之间的消息分发。

要实现消息广播,就必须每个消费端绑定一个单独的队列进行监听,然后将这个队列绑定到广播交换机,实现消息广播,或者通过信道创建临时队列接收消息。

生产端只需要将消息发布到广播交换机,而不需要关心消息会被发送到哪里。