RabbitMQ中的队列重影使用者

RabbitMQ中的队列重影使用者,rabbitmq,message-queue,amqp,rabbitmq-exchange,Rabbitmq,Message Queue,Amqp,Rabbitmq Exchange,在测试环境中,即使在应用程序停止时,仍有兔子消费者连接到中继-*队列。这会导致发送到队列的消息被这些“ghost”使用者使用,而实际应用程序不会接收到任何数据,除非应用程序的使用者碰巧首先拾取数据 例如,rabbitTST队列RELAY-TASK-PUBLISH-QUESTION-STORERELAY(grails app)应该是唯一的使用者,它在服务器上被关闭,但目前有14个使用者 不是兔子/排队/消费者专家,但我不认为它应该这样工作 版本:RabbitMQ 3.3.5,Erlang R14B

在测试环境中,即使在应用程序停止时,仍有兔子消费者连接到
中继-*
队列。这会导致发送到队列的消息被这些“ghost”使用者使用,而实际应用程序不会接收到任何数据,除非应用程序的使用者碰巧首先拾取数据

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

不是兔子/排队/消费者专家,但我不认为它应该这样工作

版本:
RabbitMQ 3.3.5
Erlang 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}]" `
“=错误报告===2017年10月5日::17:04:14===
AMQP连接错误:
{ssl_升级_错误,ekeyfile}
=信息报告===2017年10月5日::17:04:14===
接受AMQP连接(10.142.33.2:22343->10.142.18.21:5671)
=错误报告===2017年10月5日::17:04:14===
SSL:1112:错误:[]/etc/rabbitmq/SSL/rabbitmq_wildcard.key
[{ssl_连接,init_私钥,5},
{ssl_连接,ssl_init,2},
{ssl_连接,init,1},
{gen_fsm,init_it,6},
{proc_lib,init_p_do_apply,3}]`

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

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

rabbitmqctl list_channels pid name connection consumer_count
这样,您应该能够识别哪些频道具有这些“幽灵”消费者(因为它们将具有
消费者计数>0

现在,让我们找到连接:

rabbitmqctl list_connections pid name peer_host peer_port connected_at user vhost | grep ${channel}
这样,您应该识别启动连接的主机/端口

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

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

rabbitmqctl close_connection <connectionpid> <reason>
rabbitmqctl关闭\u连接

或者从UI关闭它。

嗨,亚当,非常感谢你的帮助。只是想确认在Ghost消费者的情况下消费者计数>0或消费者计数>1?我使用的是RabbitMQ 3.3.5,而且下面的命令rabbitmqctl list\u connections pid name peer\u host peer\u port user vhost connected\u at Listing connections出现错误。。。错误:{bad_参数,connected_at}删除
connected_at
然后,它只是一个时间戳。关于
>0
>1
,这取决于您的应用程序-您需要找到一些您觉得奇怪的东西。如果(例如)每个连接只有1个消费者,并且看到2个或更多消费者,那么请尝试关闭它,并查看故障出现的位置-这应该会将您指向创建这些“幽灵”消费者的位置。嗨,Adam,我无法刷新频道。没有找到结果。我可以看到一些随机通道被添加到队列管理插件的消费者部分。我把他们称为排队的幽灵消费者。关闭连接会有帮助吗?关闭连接会导致使用者出现一些异常,这样可能有助于您识别它们。但看看管理界面——你应该能够通过点击
队列->消费者->频道->连接来找出谁创建了这个幽灵消费者。