2012-06-27 69 views
4

我們已按照http://www.rabbitmq.com/ha.html中的說明設置了包含3個節點rabbit1,rabbit2和rabbit3的主動 - 主動羣集。 要創建鏡像隊列,我們​​使用x-ha-policy並獲取我們在consumerProperties中將customer_cancel_notify設置爲true的消費者取消通知。 現在,我們用兔子2作爲主人將消息發佈到隊列中,讓消費者從兔子3消費。當rabbit2停止時,連接到rabbit3的用戶沒有收到取消通知。處理RabbitMQ中的消費者取消通知

我們正在使用的RabbitMQ 2.8.2-1和我們的Java消費者POC代碼是在這裏 - https://gist.github.com/2990146

不知道我們在做什麼錯。任何指針將不勝感激。

有沒有人試圖取消處理用php-amqplib通知?

回答

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僞爪哇(請編輯測試後,這個答案)

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

+0

你能告訴我在哪裏指定這個選項的.NET客戶端? – Pritam

+0

@Pritam,我沒有使用.NET,但它看起來像你將它設置爲你傳遞給'ConnectionStartOK'的'IDictionary clientProperties'的'capabilities'鍵的子字典。 https://www.rabbitmq.com/releases/rabbitmq-dotnet-client/v3.4.3/rabbitmq-dotnet-client-3.4.3-user-guide.pdf – spazm

+0

感謝您的回覆。 @Spazm。 – Pritam