处理重新总线 MSMQ 队列删除



我在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 的新手,因此我无法弄清楚如何使用它。任何支持都会有所帮助。

如果在 Rebus 终结点运行时删除其输入队列或错误队列,则无法帮助将其恢复。

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

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

我建议您不要在系统运行时删除队列。如果您在计算机上弄乱 Rebus Snoop 时不小心删除了队列,您只需重新启动端点,然后一切就会恢复正常。


顺便说一句,添加了AddQueueCallback方法,以便可以在自动创建的队列上自定义用户权限......我想可以对特定错误做类似的事情,例如"哇,没有队列!!1"场景。如果您觉得缺少某些内容,则应通过在此处创建一个问题来建议它

最新更新