4

http://www.rabbitmq.com/ha.htmlの指示に従って、rabbit1、rabbit2、rabbit3 の 3 つのノードでアクティブ/アクティブ クラスターをセットアップしました。ミラー化されたキューを作成するには、x-ha-policy を使用し、消費者のキャンセル通知を取得するには、clientProperties の consumer_cancel_notify に true を設定しました。ここで、rabbit2 をマスターとしてキューにメッセージを発行し、コンシューマーに 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 メソッドを非同期に受信することを想定していないため、この動作を有効にするために、クライアントはclient-propertiesに機能テーブルを 提示する必要があります。キー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 に答える