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

4
我们按照http://www.rabbitmq.com/ha.html中的指示,使用3个节点rabbit1、rabbit2和rabbit3设置了主动-主动集群。 为了创建镜像队列,我们使用x-ha-policy,并将consumer_cancel_notify的clientProperties设置为true以获取消费者取消通知。 现在,我们使用rabbit2作为主节点向队列发布消息,并使消费者从rabbit3消费。当停止rabbit2时,连接到rabbit3的消费者未收到取消通知。 我们正在使用rabbitmq 2.8.2-1,我们的java消费者POC代码在此处-https://gist.github.com/2990146 不确定我们做错了什么。非常感谢任何提示。 有人尝试使用php-amqplib处理取消通知吗?
1个回答

2
您的gist的第22行存在问题。consumer_cancel_notify需要在clientProperties的capabilities表中,而不是顶级键中。
clientProperties.put("consumer_cancel_notify", Boolean.valueOf(true));

AMQP 0-9-1客户端默认不会异步地从代理服务器接收basic.cancel方法。因此,为了启用此行为,客户端必须在其client-properties中呈现一个capabilities table,并且其中有一个键consumer_cancel_notify和一个布尔值true。请参阅扩展部分以获取更多详细信息。 http://www.rabbitmq.com/extensions.html#consumer-cancel-notify
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

请问您在哪里可以指定这个.NET客户端选项? - Pritam
@Pritam,我没有使用过.NET,但看起来你需要将其设置为IDictionary clientPropertiescapabilities键的子字典,并将其传递给ConnectionStartOK。https://www.rabbitmq.com/releases/rabbitmq-dotnet-client/v3.4.3/rabbitmq-dotnet-client-3.4.3-user-guide.pdf - spazm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接