检索消息我们有一个问题,在我们的卤面/ RabbitMQ的设置,其中卤面突然停止检索/从RabbitMQ的处理消息。这在上个月发生了两次,我们不确定如何继续。卤面停止从RabbitMQ的
我们的RabbitMQ设置有不同的服务器上的两个节点,以及卤面端是一个Windows服务。
我们看到卤面或在卤面运行在服务器上的事件日志中没有错误。 我们在RabbitMQ服务器上也看不到错误。
Rebus(和windows服务)继续运行,因为我们会看到其他日志消息,如DueTimeOutSchedular和timeoutreplies。但是,似乎工作线程停止运行,但没有记录任何错误。
它导致的是不断增加:(,我们添加日志监控,以使我们得到通知,如果它再次发生一个RabbitMQ的输入队列。
但是我正在寻找就如何继续“调查”,并就如何防止这种想法,也许你们当中有些人已经在此之前经历?
UPDATE 看来,我们实际上也有一个节点崩溃,至少最后一次发生。主的RabbitMQ节点崩溃(服务器崩溃),并从被晋升为主。至于我可以从RabbitMQ的日志中看到的节点都文吨按计划。 RabbitMQ日志中没有其他错误。
在这件事发生卤面被配置为只连接到这是从(然后晋升为大师)的节点如此卤面没有经历过失败的RabbitMQ,因此没有卤面连接错误的时间。但是,似乎Rebus在发生故障时停止处理消息。
实际上,我们在这似乎是一个几队列体验这一点,他们中的一些,但不是所有的似乎不同步的状态已经结束了。
UPDATE 2 我能够很容易地重现问题,所以它可能是我们的设置中的配置问题。但这是我们重现它的方法
- 在集群中启动两个节点,例如: rabbit1(主)和rabbit2(从)
- Rebus的连接到rabbit2,从属
- 关闭rabbit1,主。 rabbit2被提升为掌握
这些队列被镜像
我们有两个小的测试应用程式来重现此,一个“发送”发送消息的每个第二和处理该消息的“消费者” 。
当rabbit1已关闭时,“使用者”停止处理消息,但“发件人”不断发送消息并且队列不断增长。
- 开始rabbit1再次,它加入作为从
这有没有影响,“消费者”仍无法处理的消息。
- 重新启动“消费者”应用
当“消费者”重新启动它会检索所有消息和处理它们。
我想我已经正确地遵循了安装指南,但它可能是我们的配置问题。我似乎无法找到任何能够表明我们做错了什么的事情。
卤面仍连接到RabbitMQ的,我们看到,在管理网站的连接选项卡,将“消费者”发送/收到B/S下降至约2 B/S当它停止处理消息
更新3 好吧,所以我下载了Rebus源代码,并附加到我们的过程中,以便在停止时可以看到“RabbitMqMessageQueue”类中发生了什么。当“rabbit1 *关闭了 “BasicDeliverEventArgs” 为空,这是代码
BasicDeliverEventArgs ea;
if (!threadBoundSubscription.Next((int)BackoffTime.TotalMilliseconds, out ea))
{
return null;
}
// wtf??
if (ea == null)
{
return null;
}
参见:https://github.com/rebus-org/Rebus/blob/master/src/Rebus.RabbitMQ/RabbitMqMessageQueue.cs#L178
我喜欢 “WTF ??” 评论:)
非常感谢。我现在已经多次运行我的测试应用程序,无法重现错误,它能够正确检测到流结束并重新连接。但是,我们看到“回滚事务时发生错误!”错误,但在“正常”连接错误期间也会发生此错误。 Rebus现在继续检索邮件:) –
感谢您帮助我改进Rebus - 这是对错误的非常有帮助的描述! :) – mookid8000