4

我们按照http://www.rabbitmq.com/ha.html中的说明设置了一个具有 3 个节点 rabbit1、rabbit2 和 rabbit3 的主动-主动集群。为了创建镜像队列,我们​​使用 x-ha-policy 并获取消费者取消通知,我们在 clientProperties 中为 consumer_cancel_notify 设置了 true。现在,我们以 rabbit2 为 master 将消息发布到队列,并让消费者从 rabbit3 消费。当 rabbit2 停止时,连接到 rabbit3 的消费者不会收到取消通知。

我们使用的是 rabbitmq 2.8.2-1,我们的 java 消费者 POC 代码在这里 - https://gist.github.com/2990146

不确定我们做错了什么。任何指针将不胜感激。

有没有人尝试使用 php-amqplib 处理取消通知?

4

1 回答 1

2

你的要点第 22 行是个问题。consumer_cancel_notify 需要位于 clientProperties 的功能表中,而不是顶级键。

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 pseudo-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 处理取消通知?” 看起来答案是坚定的“也许”==> http://grokbase.com/t/rabbitmq/rabbitmq-discuss/11cynv8zkz/active-active-implementation-in-php

于 2012-07-31T02:31:55.913 回答