有时我们的Rabbit消息传递服务器需要重新启动。但是,在此之后,一些正在通过基本的消耗阻止呼叫进行监听的使用者不会消耗任何消息,除非它们自己重新启动,并且它们也不会引发任何异常。
这是什么原因,我该如何解决?
答案 0 :(得分:1)
答案 1 :(得分:0)
正如我在评论中提到的那样,每个AMQP客户端库都有不同的恢复连接的方法,有些依赖开发人员来实现。没有 NO 规范方法。
Pika将this example作为恢复连接的起点。请注意,该代码用于未发行的Pika版本(1.0.0
)。如果您使用的是0.12.0
,则必须根据方法调用调整参数。
测试和实现连接恢复的最佳方法是模拟故障条件,然后为它们编写代码。运行您的应用程序,然后终止beam.smp
进程(RabbitMQ)以查看会发生什么。如果您有RabbitMQ集群,请使用防火墙规则来模拟网络分区。您的应用程序可以处理吗?运行rabbitmqctl stop_app; sleep 10; rabbitmqctl start_app
会发生什么?您的应用程序可以处理吗?
通过toxiproxy
之类的TCP代理运行您的应用程序,并引入延迟和其他非最佳条件。关闭代理以模拟突然的TCP连接关闭。在每种情况下,都为该故障情况编写代码并记录事件,以便以后有人可以诊断出发生了什么情况。
我已经看到太多的开发人员为“幸福之路”编写代码,只是导致他们的应用程序在生产中出现严重故障,而确定故障根源的能力为零。