我正在尝试为系统中的所有节点设置广播消息。当新节点加入系统时,它会向其他人发布消息以宣布其输入。我设计的方式是,存在一个交换,所有节点都将绑定自己的队列。每当新节点加入系统时,它都会将其队列绑定到交换机并向交换机发布消息。所有节点都将接收此msg(包括其自身),并且所有其他节点(此消息除外)将发送“ack”消息,以便新节点将了解系统中的可用节点。但不知怎的,我无法让这个工作。我的广播消息不会传播到系统中的每个节点。一个简单的单节点发布和休息正在工作。但同样的节点发布和消费在某种程度上被搞砸了。
除了上面提到的逻辑之外,还有其他有效的方法吗?或者从rabbitmq的角度来看是否有任何限制来实现上述目标,或者我的代码是否有问题,我是否需要仔细研究它。
答案 0 :(得分:1)
您描述的方式,您的解决方案应该有效。但是,如果没有更详细的代码示例(“播放器”中的消耗/发布逻辑和其他对等体中的消耗/确认发布逻辑),则很难进行调试。
但是,有几个常见的问题可能会让你失望:
basic.ack
)你的播音员收到的消息。否则,你可能没有看到由于consumer prefetch而导致的后续消息,尽管在大多数客户端库中你必须先在某个地方明确地转换它。
basic.ack
(不是不要通知发件人任何事情,而不是通过向粉丝交易所发布收到的公告。顺便说一句,我不知道你为什么要进行declare-queue / bind / publish而不是发布/ declare-queue / bind;是否有充分的理由需要一个通知节点来接收自己的通告消息?如果您正在进行“自我测试”行为,我认为最好只实施定期“可以成功宣布的事情吗?”相反,在某处进行健康检查,尽管那是完全主观的。
答案 1 :(得分:0)
您是否尝试过使用您在广播消息中确定的回调队列的RPC样式消息?就像the rabbitmq tutorial一样。