在RabbitMQ中处理消费者取消通知

时间:2012-06-27 02:30:45

标签: rabbitmq

我们已按照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处理取消通知?

1 个答案:

答案 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