2017-11-07 14 views
0

RabbitMQを使用してキュー内のメッセージを取得しています。一つずつ。 これは私のコードの抜粋です:RabbitMQでAckをC#で使用するには?

var data = channel.BasicGet(queue, true); 
     if (data != null) 
      message = System.Text.Encoding.UTF8.GetString(data.Body); 
     else 
      message = ""; 
     return message; 

しかし、私は、ACKプロパティを使用する方法を知りたいのですが?読んだメッセージを確認/キャンセルするにはどうすればよいですか?

Thanx! the Docsから

+1

[ドキュメントを読む](https://www.rabbitmq.com/dotnet-api-guide.html)しましたか? 'BasicGet'の2番目のパラメータは自動的に確認するかどうかを示します。 'false'に設定すると、' channel.BasicAck'を呼び出して確認することができます。 –

答えて

0

:あなたは、2つの異なるオプションがあります。すなわち

ノアックので=上記偽、あなたも、あなたが正常に受信し、メッセージを処理していることを確認するためにIModel.BasicAckを呼び出す必要があります真noAck

BasicGet

channel.BasicGet(queue, true); 

この方法では、メッセージを確認する必要はありません。メッセージはBasicGetの後にキューから削除されます。この使用法は通常、値の小さいメッセージ用です。BasicGetの後で処理が失敗すると、メッセージは失われます。

あるいは、偽noAckで:

var result = channel.BasicGet(queue, false); 
// Process the message here ... e.g. save to DB 
// If the processing succeeds, Ack to remove the message 
channel.BasicAck(result.DeliveryTag, false); 

この2番目のオプションは、メッセージの損失はオプションではありません重要なメッセージのために使用されます。消費プロセスがクラッシュし、メッセージを確認できない場合、メッセージはキューに戻されます。

関連する問題