問題タブ [rabbitmqctl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rabbitmq - ttl 後に配信不能メッセージが元のキューに再キューイングされない
これらの 2 つのリンクlink1 link2をたどって、キュー内のメッセージの処理を遅らせることを計画しました。したがって、リンクで提案されているとおりです。x-dead-letter-exchange
およびx-dead-letter-routing-key
引数を使用して元のキューを宣言しました。dead-letter-queue
メッセージがコンシューマーによる処理に失敗したか、ttl が発生したか、キューの長さが超過したときに、いわゆるにメッセージを発行しました。現在、dead-letter-queue
同様の引数がパラメータとともに設定されていttl
ます。ttl
超過後にメッセージを元のキューに再発行することを想定しています。しかし問題は、すべてのメッセージがドロップされていることです。
さらに、ここで落とし穴があります。失敗したメッセージを元のキューから配信不能キューに明示的に発行する場合。次に、ttl の後、メッセージを元のキューに再発行します。なぜそうなのか、どうすればそれを機能させることができますか。そのため、dead-letter-queue はメッセージをドロップするのではなく、元のキューに再発行します。を使用してRabbitMQ 3.0.0
います。
direct
参考までに、タイプの交換とルーティング キーの両方を作成しました。
rabbitmq - 高可用性のための RabbitMQ クラスタリング キュー ミラーリング: 時間 t でキューのマスター ノードの IP を取得する
私の理解では、RabbitMQ クラスタリングは可用性ではなくスケーラビリティのためのものですが、ミラー化されたキューを使用すると、マスターに障害が発生した場合に最新のスレーブをマスターに昇格させることができるという点で、可用性も確保できます。
ドキュメントから:
キューに発行されたメッセージは、すべてのスレーブに複製されます。コンシューマーは、接続先のノードに関係なくマスターに接続され、スレーブはマスターで確認応答されたメッセージをドロップします。したがって、キューのミラーリングは可用性を向上させますが、ノード間で負荷を分散しません (参加しているすべてのノードがそれぞれすべての作業を行います)。
したがって、特定のキューのノード間での負荷分散は意味がありません。これにより、接続されたノードからキューのマスター ノードに余分なトリップが常に追加されるためです (私が何かを誤解していない限り)。したがって、どのノードが特定のキューのマスターであるかを常に把握できるようにする必要があります。
私は実際にはRabbitMQをあまり扱っていないので、ドキュメントに記載されていないだけかもしれませんが、マスターに障害が発生し、スレーブが昇格した場合、ミラーリングされたキューのマスターのIPを特定する方法はないようです.主人。私が目にするすべての情報源は、最初のマスター ノードを設定する能力について言及しているだけで、私にとってはあまり役に立ちません。任意の時間 t について、特定のキューのマスター ノード IP を見つけるにはどうすればよいですか?
PS: ネットワーク パーティション (同じ LAN 内のノードでも発生する可能性があります) がある場合、ノードと通信できないノードにヒットする可能性があるため、単純にノードをロード バランサーの背後に配置するのも良くないようです。キューのマスター、またはさらに悪いことに、私たちが進化しているスプリットブレインが存在する可能性があります.
rabbitmq - RabbitMQ エラー: ノードに接続できません: nodedown
2 つの Rhel インスタンスを使用してクラスタリングを実行しようとしています。私はお互いに ping をempd -names
実行することができ、コマンドを使用しようとしているときでも、4369 で起動して実行されていsudo rabbitmqctl join_cluster rabbit@ip-10-23-20-36
ます。
ノード 'rabbit@ip-10-23-20-36' を 'rabbit@ip-10-23-209-142' でクラスタリングしています... エラー: ノードに接続できません ['rabbit@ip-10-23-209 -142']: ノードダウン
診断
連絡を試みました: ['rabbit@ip-10-23-209-142']
rabbit@ip-10-23-209-142: * ip-10-23-209-142 で epmd (ポート 4369) に接続できません: nxdomain (存在しないドメイン)
現在のノードの詳細: - ノード名: 'rabbitmq-cli-80@ip-10-23-20-36' - ホーム ディレクトリ: /var/lib/rabbitmq - クッキー ハッシュ: u7nRIpJ40Fd356iLbkDO6Q==
私がすでに試したこと:
- を使用して両方のインスタンスで同じ Cookie 名を確認しました
sudo cat /var/lib/rabbitmq/.erlang.cookie
。 - epmdポートも変更しました
export ERL_EMPD_PORT=4370
netstat -an |grep 4369 | grep -i listen
- プラグイン管理の GUI でホスト名も変更します。
も使用して所有者と権限を変更しました
/li>ポートを追加
/li>sudo rabbitmqctl ステータス
/li>
*IPアドレスはサンプルアドレスです。