仅在任务完成时出列项目

时间:2017-07-23 21:25:41

标签: c# .net rabbitmq easynetq

我正在使用easynetq订阅队列。

 var logger = new RabbitMQLogger();
 string cfg = ConfigurationManager.AppSettings["rabbitConfig"];
 var bus = RabbitHutch.CreateBus(cfg, x => x.Register<IEasyNetQLogger>(_ => logger));

 bus.Subscribe<MyRequest>("", msg =>
 {
     Console.WriteLine("Processing: " + msg.Name);
     // call DoTask() 
     // if it's true remove this item from a queue on a rabbitmq server
     // if it's false do nothing
 });

 private bool DoTask()
 {
    /// .. do something
    return true;
 }
  

如果DoTask的返回值为真,我该如何出列?

1 个答案:

答案 0 :(得分:1)

一旦消费者处理程序方法/订阅处理程序完成,EasyNetQ就会对消息进行确认。如果处理程序抛出异常(如果你让错误冒出来),EasyNetQ的默认错误处理过程将处理它。消息和异常将包装在错误消息中并放在错误队列中,然后将ACK发送给代理。

然后,您可以在修复错误条件后重播该邮件。

可以在此处找到更多信息:https://github.com/EasyNetQ/EasyNetQ/wiki/Error-Conditions(页面底部)