我们已按照http://www.rabbitmq.com/ha.html中的说明设置了一个包含3个节点rabbit1,rabbit2和rabbit3的主动 - 主动群集。 要创建镜像队列,我们使用x-ha-policy并获取消费者取消通知,我们已将其置于clientProperties中的consumer_cancel_notify中。 现在,我们使用rabbit2作为主服务器将消息发布到队列,并让消费者从rabbit3中消费。当rabbit2停止时,连接到rabbit3的消费者没有收到取消通知。
我们正在使用rabbitmq 2.8.2-1,我们的java消费者POC代码在这里 - https://gist.github.com/2990146
不确定我们做错了什么。任何指针都将受到高度赞赏。
是否有人尝试使用php-amqplib处理取消通知?
答案 0 :(得分:2)
你的要点第22行是个问题。 consumer_cancel_notify需要位于clientProperties的capabilities表中,而不是顶级键。
clientProperties.put("consumer_cancel_notify", Boolean.valueOf(true));
默认情况下,AMQP 0-9-1客户端不会收到basic.cancel 来自代理的异步方法,以便启用此方法 行为,客户必须在其中显示功能表 客户端属性,其中有一个键 consumer_cancel_notify 和一个 布尔值为true。有关详细信息,请参阅功能部分 就此而言。 http://www.rabbitmq.com/extensions.html#consumer-cancel-notify
Handwaving伪java(测试后请编辑此答案)
Map<String, Object> clientProperties = new HashMap<String, Object>();
Map<String, Object> clientCapabilities = new HashMap<String, Object>();
clientCapabilities.put("consumer_cancel_notify", Boolean.valueOf(true));
clientProperties.put("capabilities", clientCapabilities);
至于你原来的问题,“有没有人试图用php-amqplib处理取消通知?”看起来答案是坚定的“可能”==&gt; http://grokbase.com/t/rabbitmq/rabbitmq-discuss/11cynv8zkz/active-active-implementation-in-php