Msmq 从消息队列中消失的消息

Msmq 从消息队列中消失的消息,msmq,rebus,Msmq,Rebus,在我们的软件中,我们使用Rebus服务总线与Microsoft消息队列相结合来执行各种操作。由于一段时间以来存在多个情况,消息被发送到队列,但处理程序不知何故没有拾取消息,消息被从队列中删除(或从未到达)。在错误队列或死信队列中找不到消息。它消失在太空的某个地方,我们不知道发生了什么 我们在队列上启用了日志,对于失败的消息,我们看到当前中止计数设置为3,其中成功处理的消息的当前中止计数为1。这与我们的rebus配置相对应(见下文),但是我们不知道为什么它们会被中止,或者为什么一些消息会失败。在事

在我们的软件中,我们使用Rebus服务总线与Microsoft消息队列相结合来执行各种操作。由于一段时间以来存在多个情况,消息被发送到队列,但处理程序不知何故没有拾取消息,消息被从队列中删除(或从未到达)。在错误队列或死信队列中找不到消息。它消失在太空的某个地方,我们不知道发生了什么

我们在队列上启用了日志,对于失败的消息,我们看到当前中止计数设置为3,其中成功处理的消息的当前中止计数为1。这与我们的rebus配置相对应(见下文),但是我们不知道为什么它们会被中止,或者为什么一些消息会失败。在事件日志中也找不到任何内容

这是我们当前的REBS配置:

Configure.With(_adapter).Transport(t => t.UseMsmq(_rpAppBusAddress))
                 .Options(o =>
                 {
                     o.EnableEncryption(_rebusEncryptionKey);
                     o.SimpleRetryStrategy(maxDeliveryAttempts:3);
                     o.EnableDataBus().StoreInSqlServer(rebusConnectionString, attachmentDbTableName);
                 }).Routing(SetRouting())
                 .Start();

有人知道这些信息为什么会消失吗?感谢您的帮助

我们找到了信息消失的原因。应用程序没有将消息放入错误队列的权限(我们很遗憾)。

我们也禁用了MSMQ中的存储限制,但这也没有帮助。当您说您已检查死信队列时,您是指Rebus的错误队列吗?或者,您是指MSMQ的“事务死信消息”队列吗?我们已将rebus错误队列和事务死信队列都检查过了。不知何故,您是否可以使用另一个队列来使用来自
\r AppBusAddress
指定的相同队列名称的消息?@JohnBreakwell负日志由rebusok默认启用。。。。但是这些信息真的消失了吗?或者它们只是变得不可见,因为它们被接收,然后在某个点上回滚?据我所知,Rebus不能丢失信息。如果转发到错误队列操作失败,则传入消息的
MessageQueueTransaction
将不会提交,从而将接收到的消息返回到输入队列(据我所知,消息已消失)。我们在msmq中的任何队列上都找不到其他消息跟踪。但是,我们使用的是旧版本的REBS(3.1.5)。这不会有什么区别。Rebus一直以来都有严格有序的操作顺序,这表明它1)尝试处理传入消息,如果没有失败,它2)尝试发送所有传出消息,如果没有失败,它3)确认传入消息。如果某个消息在此过程中出现故障,它将对传入消息进行NACK,从而使其在队列中再次可见。。。。。请让我知道我是否应该帮助你进一步调查:)好吧,我们现在解决了这个问题,所以不需要进行广泛的调查。我确实觉得有趣的是,我们在MSMQ的任何地方都看不到消息。可能是因为将消息放入队列的应用程序与处理消息的应用程序相同吗?您将陷入一个无休止的循环,试图处理消息,但未能将其放入错误队列。