2016-10-26 2 views
0

(必要であれば、この時点で私は、他のメッセージキューの実装を選ぶことができますが)私は、私は、私のアプリケーションは次のように働いている ウサギMQにmasssageのロックを管理する

より型破りな方法でのRabbitMQを使用しようとしています顧客がN個のメッセージを非同期に取得しているキューを1つ(必要に応じてさらに持つことができます)持っています。彼らが仕事をした後、私はクライアントからの結果をdbに送ります。

私は2つの問題があります:最初に私は同じメッセージで動作することを望んでいません.2番目は私の顧客がブラウザを閉じるか、単に動作を停止する場合にメッセージを失うことはありません。

タイムアウトが削除されずに別のキューに移動するというメッセージが変更された場合は、ドキュメントを見て、完璧だったTTLを見ました。これを変更する方法を見つけることができません。

さらに、一見したところで私が望むものを見て、その仕組みがこのように働いていることを確認しました。消費者がメッセージを受け取ったときにキューに確認を送信すると、この確認を遅らせて送信できると思ったクライアント側で作業が完了したとき。 私の問題は、どのメッセージも確認を得ずにそれをキュー(または別のキュー)に戻すキューをプログラムできないということでした。

顧客がメッセージを受信するときに、私が欲しい、私は、スケジュールメッセージを行う方法もを見つけるが、私はメッセージが5分でキューに挿入されることを望んでいないので、それはどちらか助けていません削除が確認されるまで5分間キューにロックされます。それ以外の場合はキューに戻ります。

私の仕組みを有効にする一時的なキューはできますか?

誰かが問題の一つで助けるか、それは素晴らしいことだ別のMQでそれを行うには、別のアーキテクチャや選択肢を提案することができます。

資源:

確認: Locks and batch fetch messages with RabbitMq

TTL: https://www.rabbitmq.com/ttl.html

スケジュールメッセージ: https://www.rabbitmq.com/blog/2015/04/16/scheduling-messages-with-rabbitmq/

http://www.rabbitmq.com/blog/2011/02/10/introducing-publisher-confirms/

ロックについての記事が、彼の問題は、バッチャー成分でした

答えて

0

私の問題は、何かメッセージがあった場合に、 が確認を得ずにそれをキュー(または別のキュー)に戻すキューをプログラムできないということでした。私は、この確認を遅らせ、仕事があるときにそれを送ることができると思ったのRabbitMQはこれがとにかくので、あなたがしなければならないすべては自動ACKフラグをオフにしている、あなたは

これを考え出したん

クライアント側で を実行してください。

メッセージの処理が完了したら、そのままACKを送信してください。 未確認のメッセージはすべてキューに残り、次のコンシューマに再配信されます(設定に応じて同じメッセージが再度表示されるとき)

関連する問題