MassTransit故障消息发布两次

时间:2014-01-13 21:58:56

标签: c# .net rabbitmq masstransit

我有一个使用以下订阅抛出异常和总线的消费者:

ServiceBusFactory.New(sbc=>{
    ... removed for brevity...
    sbc.Subscribe(s=>{
        ... removed for brevity...
        var logger = LogManager.GetLogger("Faults");
        s.Handler<IFault>(fault => logger.Error(JsonConvert.SerializeObject(fault)));
    }
 }

当一个异常被抛出5次并且它继续发生故障时,我可以看到我的处理程序在两个不同的线程中被调用两次。

我不知道为什么,我希望它只发生一次。

也许我会以错误的方式解决这个问题。我希望能够记录发生的故障并能够重新处理它们。是否已经内置了MassTransit或RabbitMQ来处理这个问题?最初我使用MSMQ并自动将故障消息丢弃到相关的_error队列中,但我没有看到使用RabbitMQ的队列。

3 个答案:

答案 0 :(得分:2)

我已确认,如Gist所示:

https://gist.github.com/phatboyg/8428147

故障事件仅在消费者连续五次失败后才发布一次。这是使用RabbitMQ或MSMQ从NuGet获得的MT 2.9.5。

答案 1 :(得分:1)

我不知道有关此报道的问题。我会努力将其重现为一个简单的案例,并将其带到邮件列表http://groups.google.com/group/masstransit-discuss或提交问题https://github.com/MassTransit/MassTransit/issues?state=open以及可重现的案例。

答案 2 :(得分:0)

我相信我发现了问题...早期尝试记录错误意味着为每个特定的故障类型而不是IFault对象注册处理程序。其中一些交易所仍在RabbitMQ注册。删除那些解决了问题。