处理Rebus MSMQ队列删除

时间:2017-03-23 09:58:42

标签: c# msmq rebus

我在我们的rebus实现中使用MSMQ传输。以下是启动rebus服务的代码:

BuiltinHandlerActivator handlerActivator;
this.handlerActivator.Handle<TransportMessage>    
(this.HandleTransportMessageAsync);

 var bus = Configure.With(this.handlerActivator)
           .Transport(t => t.UseMsmq(this.SenderName))
           .Routing(r => r.TypeBased().AddEndpointMappingsFromAppConfig())
           .Start();  

我想处理异常/错误,以防有人使用snoop / compmgmt.msc意外删除消息队列。

当我在消息队列中手动删除MSMQ消息队列时,我们收到带有文本的错误

  

已删除rebus工作队列 - 不再接收任何消息

所以,想知道Rebus是否有可能处理此异常并提供回电或其他任何方式?

我注意到在Rebus.MSMQ命名空间中有一个名为MsmqTransport的类,它暴露方法 AddQueueCallback 以提供类似的回调。由于我是Rebus / MSMQ的新手,我无法弄清楚如何使用它。任何支持都会有所帮助。

1 个答案:

答案 0 :(得分:1)

如果在运行时删除Rebus端点的输入队列或错误队列,则无法帮助它们恢复。

Rebus 当然可以处理这种情况(在其传输实现中,在您的情况下 - 正如您在MsmqTransport类中已经正确找到的那样) - 但我(和其他传输的贡献者)必须在某种程度上认为没有必要这样做,可能是因为队列在运行时突然消失将是一种非常罕见的情况。

在某种程度上,如果输入队列被意外删除,我不希望我的端点继续工作 - 我想我更喜欢日志中的ERROR和红灯闪烁,因为这种情况在生产中会是一场相当大的灾难

我建议您在系统运行时不要删除队列。如果您在计算机上乱搞Rebus Snoop时意外删除了一个队列,您只需重启端点,然后一切都将恢复正常。

btw添加了AddQueueCallback方法,以便可以在自动创建的队列上自定义用户权限...我想可以针对特定错误执行类似的操作,例如:喜欢“WHOA那里没有QUEUE !! 1”的场景。如果您认为这是遗漏的内容,则应通过创建问题here

来建议
相关问题