2016-10-16 10 views
0

私はRuby開発者です。私のプロジェクトでは、データがキューに入るとすぐに処理するためにrabbitMQを使用しています。私はRabbitMqと対話するためのインターフェースを提供するrabbitMQクライアントであるbunny gemを使用しています。RabbitMq:メッセージ処理中に例外が発生したときにキューからメッセージが失われました。

私の問題は、例外が発生したとき、またはキューからデータを処理しているときにサーバーが突然停止したときに、キューからメッセージが失われることです。

私は、人々がrabbitMQキューから失われたメッセージをどのように処理するかを知りたいと思います。処理のためにそれらのメッセージを戻す方法はありますか?

+0

あなたはより多くを提供することができ情報?例外、コード構造など –

+1

私の場合は、エラーメッセージがメインキューから削除され、エラーキューに入るたびに発生します。エラーキュー用に1つのコンシューマを作成し、すべてのエラーメッセージをメインキューに再度パブリッシュしました。 この回避策は、私たちの問題を解決します。 –

答えて

1

メッセージが失われたときにメッセージを戻す方法はありません。おそらくRMQのデータベースキャッシュのいくつかのエントリを試してみることができるかもしれませんが、それはちょっと野生の推測/ロングショットなので、役立つとは思えません。

あなたは将来のために何をする必要がありますすることです:

  • あなたは、単一のサーバーを使用している場合には:耐久性のあるキューとメッセージを作成し、明示的に認める(そう自動ACKフラグをオフに切り替えます)消費者側のメッセージは処理された後にのみ表示されます。
  • は、あなたが(もちろん、これらの状況を回避するために、正確に推奨される)RMQノードのクラスタを使用している場合には:

をミラーリングキューがRMQ persistanceを見て設定し、high availability.

関連する問題