在RabbitMQ中队列Ghost消费者

时间:2017-10-06 18:16:53

标签: rabbitmq message-queue amqp rabbitmq-exchange

在测试环境中,即使应用程序停止,也有兔子消费者连接到RELAY-*队列。这导致这些“幽灵”消费者正在消耗队列的消息,并且实际应用程序不接收任何数据,除非应用程序的消费者首先接收它。

例如,rabbitTST队列RELAY-TASK-PUBLISH-QUESTION-STORE RELAY(grails app)应该是唯一的消费者,它现在在服务器上关闭,但目前有14个消费者。

不是兔子/队列/消费者专家,但我认为这不应该是它应该如何运作。

版本:RabbitMQ 3.3.5Erlang R14B04

我可以在管理插件上看到幽灵消费者。应该只有2个消费者,但目前的状况不断变化。有时它是14个消费者,有时是10个消费者。

该应用程序在tomcat实例上运行。停止后,应用程序将关闭该实例。证书有效期至2038年。

"=ERROR REPORT==== 5-Oct-2017::17:04:14 ===
error on AMQP connection <0.13009.515>:
{ssl_upgrade_error,ekeyfile}
=INFO REPORT==== 5-Oct-2017::17:04:14 ===
accepting AMQP connection <0.13019.515> (10.142.33.2:22343 -> 10.142.18.21:5671)
=ERROR REPORT==== 5-Oct-2017::17:04:14 ===
SSL: 1112: error:[] /etc/rabbitmq/ssl/rabbitmq_wildcard.key
[{ssl_connection,init_private_key,5},
{ssl_connection,ssl_init,2},
{ssl_connection,init,1},
{gen_fsm,init_it,6},
{proc_lib,init_p_do_apply,3}]" `

1 个答案:

答案 0 :(得分:0)

您可以使用命令行操作来查找使用者。

首先,让我们找出实际拥有这些消费者的渠道:

rabbitmqctl list_channels pid name connection consumer_count

通过这种方式,您应该能够识别哪些频道拥有这些“幽灵”消费者(因为他们将拥有consumer_count > 0)。

现在,让我们找到连接:

rabbitmqctl list_connections pid name peer_host peer_port connected_at user vhost | grep ${channel}

这样您就应该识别启动连接的主机/端口。

RabbitMQ的REST管理API公开了一些非常相似的功能。 您甚至可以转到管理控制台,选择有问题的队列,然后展开“使用者”部分。然后你可以找到频道,最终找到连接。

如果在RabbitMQ服务器端由于某种原因连接被卡住,您可以使用

rabbitmqctl close_connection <connectionpid> <reason>

或从UI关闭它。