首页 文章

在RabbitMQ中队列Ghost消费者

提问于
浏览
-1

在测试环境中,即使应用程序停止,也有兔子消费者连接到 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

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

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

    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暴露了一些非常相似的功能 . 您甚至可以转到管理控制台,选择有问题的队列,然后展开“使用者”部分 . 然后你可以找到 Channels ,最终找到连接 .

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

    rabbitmqctl close_connection <connectionpid> <reason>
    

    或者从UI关闭它 .

相关问题