2016-03-22 3 views
0

キューリーダープロセスがクラッシュした場合にデータが失われないように、RabbitMQからのメッセージを未確認として取得する必要があります。 1000個のメッセージごとに、メッセージデータをディスクにコミットし、そのメッセージを確認済みとして認識して消費することができます。彼らを未確認の状態にして、今私たちが持っているものを具体的にターゲットにする方法はありますか?たとえば、リストに追加した後、そのリストを繰り返してメッセージを見つけることができますか? これはRabbitMQ .net FYIです。RabbitMQ後でメッセージを確認する

+0

この件に関するブログ記事を投稿しました:http://pmichaels.net/2016/10/28/acknowledging-a-messing-using-rabbitmq/ –

答えて

4

はい、RabbitMQからのメッセージを消費し、正常に処理したメッセージを明示的に確認できます。完全な例はthe second tutorial on RabbitMQ websiteです。あなたの設定あなたの消費者は、falseに(「なしマニュアルACK」)noAckを設定されているので、.NETクライアントライブラリはなりません自動的にACKメッセージとき

  1. しかし、ここでは、このチュートリアルの関連する部分ですあなたの消費者のコールバックで
    channel.BasicConsume(queue: "task_queue", noAck: false, consumer: consumer); 
    
  2. 、あなたは明示的にメッセージをACKの場合:

    channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); 
    

ヨいずれか1つのメッセージ(multipleが偽)、またはこれを含むすべてのメッセージを受信できます(multipleがtrue)。

また、"unacknowledge" messagesでもかまいません。そのため、RabbitMQは再キューイングして別のワーカーに送信できます。肯定応答と同様に、1つまたはすべてのメッセージを肯定応答しないかどうかを判断できます。さらに、requeueフラグをtrueまたはfalseに設定して、メッセージを再キューに入れるか、またはドロップするかを指定することができます。

+0

複数のメッセージを更新する方法はありますか?注文。承認する配信タグのリストを提供することで可能性がありますか?たとえば、1,2,3,4という3つのメッセージがあり、1と3を処理し、それらを一度に認識し、2と4で異なる処理を行い、後でACKを返します。 – AbbasFaisal

+0

いいえ、AMQPの基本では不可能です。 ack'メソッド:単一のメッセージ番号と 'multiple'フラグをとり、' true'はこのメッセージ番号を意味し、以前のものは全て確認応答されます。 –

関連する問題