如何为NServiceBus Saga中的错误队列编写处理程序?

时间:2012-04-03 13:41:26

标签: handler msmq message-queue nservicebus saga

我的情况是我的MSMQ中的Maxtries是5.经过5次后,nservicebus将消息发送到我已定义的Error que。现在我想在发生这种情况时执行一些进一步的操作(我必须将某些进程的状态更新为Error) 是否可以在我的Saga类中编写一个处理程序来读取这些错误队列?

先谢谢 哈里斯

2 个答案:

答案 0 :(得分:2)

如果您使用的是2.x,则可能需要考虑编写一个单独的端点,其中错误队列是其输入队列。这样做的缺点是消息将从队列中消失。假设您仍想存储它们,则必须将它们推送到数据库或其他类型的存储。

您还可以编写一个Saga,轮询错误队列以检查消息并更新相应的状态。每次检查队列后,您都需要请求另一个超时。

在3.0中,您可以更好地控制异常,并可以实现自己的方式来处理错误。如果您实现了IManageMes​​sageFailures接口,那么您可以在那里完成工作。

答案 1 :(得分:0)

作为Adam提供的解决方案的替代方案,您可以订阅ServiceControl引发的事件,这些事件在将消息发送到errorqueue时会被引发。请参阅此处的官方文档:http://docs.particular.net/servicecontrol/contracts

另一种方法是此处所述的通知API:http://docs.particular.net/nservicebus/errors/subscribing-to-error-notifications。它允许您直接在端点上订阅某些事件(而非事件消息),如“MessageSentToErrorQueue”,因此您不需要使用错误队列。