2017-11-07 16 views
0

RabbitMQ를 사용하여 대기열에있는 일부 메시지를 가져옵니다. 하나씩. 이 내 코드의 단편이다C# 용 RabbitMQ에서 Ack를 사용하는 방법?

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

하지만 난이 긍정 응답 속성을 사용하는 방법을 알고 싶습니다? 읽은 메시지를 어떻게 확인하거나 취소 할 수 있습니까?

고맙습니다. the Docs에서

+1

[문서를 읽었습니까] (https://www.rabbitmq.com/dotnet-api-guide.html)? 'BasicGet'의 두번째 매개 변수는 자동적으로 인식 할 것인지를 나타냅니다. 'false'로 설정하면'channel.BasicAck'를 호출하여이를 확인합니다. –

답변

0

: 당신은 두 가지 옵션이 있습니다 즉

:

NOACK 때문에 = 위의 허위, 당신은 또한 당신이 성공적으로 수신하고 메시지를 처리 ​​함을 인정하는 IModel.BasicAck를 호출해야합니다 사실 noAck

,691와 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); 

이 두 번째 옵션은 메시지의 손실은 옵션이 아닙니다 중요한 메시지에 사용됩니다. 소비 프로세스가 중단되고 메시지를 확인 응답 할 수 없으면 메시지가 대기열로 반환됩니다.