2

たとえば、ネットワーク障害が発生し、プロデューサーが壊れた RabbitMQ への接続を失った場合、キューに入れる必要があるメッセージがブラック ホール化されるのをどのように防ぐことができますか? いくつかのアイデアは、すべてのメッセージをローカル データベースに書き込み、確認応答があったときにメッセージを削除し、一定期間後に定期的に再送信するというものですが、接続ファクトリがパブリッシャーに確認するように設定されている場合にのみ機能します。

4

1 に答える 1

2

イベント ロギングをシミュレートするために、テスト アプリケーションからメッセージを生成しているだけです。私は本質的に耐久性のあるプロデューサーを作成しようとしています。RabbitMQ に再接続できるタイミングを検出する方法はありますか? ConnectionListener インターフェイスがあるようですが、メッセージを送信して ConnectionListener の内部キューをフラッシュすることはできないようです。

(おそらくダミーのキューをリッスンしている)がある場合SimpleMessageListenerContainer、再接続を試み続けます (成功すると接続リスナーを起動します)。または、接続ファクトリを時々呼び出す単純なルーパーをcreateConnection()作成することもできます (毎回新しい接続を作成するのではなく、開いている場合は単一の共有接続を返すだけです)。これは、新しい接続が確立されたときにもリスナーを起動します。

パブリッシャーの確認の代わりにトランザクションを使用できますが、ハンドシェイクのためにはるかに遅くなります。それは、パフォーマンス要件が何であるかによって異なります。

于 2015-04-01T08:32:42.450 に答える