RabbitMQ 客户端 EventingBasicConsumer 停止接收消息

RabbitMQ Client EventingBasicConsumer stops receiving messages

使用 RabbitMQ.Client v. 6.2.2 我面临的问题是 EventingBasicConsumer 有时会在集群中的代理失败时停止接收消息。

调查我正在记录恢复尝试的问题,它们通常工作得很好 qui。但是这个周末,工作人员再次停止接收消息,我正在寻找如何找出哪一方有问题的建议。 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 'rabbit@rabbitmq-cluster-server-1.rabbitmq-cluster-nodes.ns' not responding **
** Removing (timedout) connection **
2022-01-22 06:44:52.904 [info] <0.529.0> rabbit on node 'rabbit@rabbitmq-cluster-server-1.rabbitmq-cluster-nodes.ns' down
2022-01-22 06:44:52.939 [info] <0.529.0> Node rabbit@rabbitmq-cluster-server-1.rabbitmq-cluster-nodes.ns is down, deleting its listeners
2022-01-22 06:44:52.942 [info] <0.529.0> node 'rabbit@rabbitmq-cluster-server-1.rabbitmq-cluster-nodes.ns' down: net_tick_timeout
2022-01-22 06:46:07.706 [info] <0.529.0> node 'rabbit@rabbitmq-cluster-server-1.rabbitmq-cluster-nodes.ns' up
2022-01-22 06:46:22.468 [info] <0.529.0> rabbit on node 'rabbit@rabbitmq-cluster-server-1.rabbitmq-cluster-nodes.ns' 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 中断了应用程序的状态。查看管理 ui 我看到连接和通道已连接,但没有为消费者列出消费者。

我在 RabbitMQ 客户端库中发现了一些关于恢复的错误,但我不确定他们是否会在这里修复这种情况。客户端有工作连接,但几乎不再是消费者,双方都很乐意继续,这对应用程序有点不利。

阻止这种情况发生的好方法是什么?实现自定义 reconnect/retry/recovery 逻辑似乎 a) 太复杂 b) 不实用。

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

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


注意: RabbitMQ 团队监控 rabbitmq-users mailing list 并且有时只在 Whosebug 上回答问题。