RabbitMQ 客户端 EventingBasicConsumer 停止接收消息

问题描述 投票:0回答:1

使用 RabbitMQ.Client v. 6.2.2 我面临这样的问题:如果集群中的代理发生故障,EventingBasicConsumer有时会停止接收消息。

为了调查这个问题,我正在记录恢复尝试,它们通常工作得很好。但这个周末,工作人员再次停止接收消息,我正在寻求建议如何找出哪一方有问题。 RabbitMQ 服务器命令客户端以及如何处理它。

EventingConsumer 的配置几乎是默认设置,AutomaticRecoveryEnabled=true 且每 60 秒检测一次 + 启用拓扑恢复

var factory = new ConnectionFactory
    {
        Uri = new Uri(config.ConnectionString),
        AutomaticRecoveryEnabled = true,
        RequestedHeartbeat = TimeSpan.FromSeconds(60),
        
    };

当时的服务器日志如下所示

2022-01-22 06:43:28.436 [info] <0.12831.3> accepting AMQP connection <0.12831.3> (X.X.X.X:59644 -> X.X.X.X:5672)
2022-01-22 06:43:28.460 [info] <0.12831.3> connection <0.12831.3> (X.X.X.X:59644 -> X.X.X.X:5672): user 'user' authenticated and granted access to vhost 'vhost'
2022-01-22 06:44:52.904 [error] <0.1031.0> ** Node '[email protected]' not responding **
** Removing (timedout) connection **
2022-01-22 06:44:52.904 [info] <0.529.0> rabbit on node '[email protected]' down
2022-01-22 06:44:52.939 [info] <0.529.0> Node [email protected] is down, deleting its listeners
2022-01-22 06:44:52.942 [info] <0.529.0> node '[email protected]' down: net_tick_timeout
2022-01-22 06:46:07.706 [info] <0.529.0> node '[email protected]' up
2022-01-22 06:46:22.468 [info] <0.529.0> rabbit on node '[email protected]' up

客户端日志

2022-01-22 06:42:44.7370409+00:00  RabbitMqClientEventSource - Received request to BeginAutomaticRecovery, but already in Recovering state.
2022-01-22 06:42:49.7397378+00:00  RabbitMqClientEventSource - Performing automatic recovery
2022-01-22 06:42:49.9343050+00:00  RabbitMqClientEventSource - Connection recovery completed

2022-01-22 06:42:50.1977866+00:00  Received message {MessageId} ...

客户端成功恢复并收到一条消息,然后完全停止,直到连接重置。

我想知道服务器是否确实通过

deleting its listeners
破坏了应用程序的状态。查看管理用户界面,我发现连接和通道已连接,但没有为消费者列出消费者。

我在 RabbitMQ 客户端库中看到一些恢复错误,但我不确定他们是否会修复这种情况。客户端具有工作连接,但几乎不再是消费者,双方都乐意继续,这对应用程序来说有点糟糕。

阻止这种情况发生的好方法是什么?实现自定义重新连接/重试/恢复逻辑似乎 a) 太复杂 b) 不实用。

如果我1-2分钟没有收到消息,有没有办法在客户端检查我是否仍然是消费者?如果是这样,请重新启动应用程序或强制重新连接?

c# rabbitmq
1个回答
1
投票

请升级至6.2.4版本。我修复了一个可能导致您在此处报告的错误。

© www.soinside.com 2019 - 2024. All rights reserved.