這裏就是我想要做:basic.Nack沒有得到處理
- 出隊的消息
- 做與消息
- 如果操作失敗的動作,把消息發回的排隊
- 如果操作成功,確認該消息
我的問題現在的問題是,如果行動失敗,該消息不重新入隊,但保持未確認。如果我進入RabbitMQ網頁配置界面,我會發現郵件被標記爲未確認,即使basic.Nack已經被移除。
var delivery = subscription.Next();
var messageBody = delivery.Body;
try
{
action.Invoke(messageBody);
subscription.Ack(delivery);
}
catch (Exception ex)
{
subscription.Model.BasicNack(delivery.DeliveryTag, false, true);
throw ex;
}
更新:
所以我已經注意到,從消息準備去未確認的真快。速度更快,然後我實際上調用subscriber.Next(),好像.Net客戶端將所有消息緩存在內存中(應用程序的內存足跡實際上增長得相當快),並從內存中處理這些消息然後發送Ack(),從Unacknowledged中解除消息。
更新2:
好像隊列被清空的真快,是因爲我沒有設置我的模型BasicQos。以下固定了一切。 Basic.Nack()似乎仍不到壽工作:
Model.BasicQos(0,1,FALSE)