0

RabbitMQチュートリアルの「メッセージ耐久性」の部分を確認しました。しかし、このメモがあります:

メッセージを永続的としてマークしても、メッセージが失われないことが完全に保証されるわけではありません。メッセージをディスクに保存するように RabbitMQ に指示しますが、RabbitMQ がメッセージを受け入れてまだ保存していない短い時間枠があります。また、RabbitMQ はすべてのメッセージに対して fsync(2) を実行しません。キャッシュに保存されるだけで、実際にはディスクに書き込まれない場合があります。

しかし、本当に耐久性のあるキューが必要な場合はどうすればよいでしょうか? どのベスト プラクティスを使用できますか? たとえば、メッセージが 2 分以内に ACK されなかった場合、データベースに「キュー」と cron による「リセンダー」を設定する必要がありますか? より良い解決策はありますか?

また、コンシューマーがメッセージを処理した後、ACK を送信する前にクラッシュした場合はどうなりますか?

UPD: 私の質問は、クラスタリングの質問の「重複の可能性」としてマークされました。これらの問題を解決するためにクラスターがどのように役立つかはわかりません。

4

2 に答える 2

2

Txでの保証付き配達についてはこちらをお読みください

パブリッシャーは次のようなものを使用します。

ch.txSelect();
ch.basicPublish("", QUEUE_NAME,MessageProperties.PERSISTENT_BASIC,"nop".getBytes());
ch.txCommit();

注: これにより、パフォーマンス アプリケーションが停止する可能性があります。

編集

@old_sound の提案による「Publisher Confirms」https://www.rabbitmq.com/confirms.htmlもお読みください。

于 2015-10-28T16:08:06.253 に答える