【问题标题】:Queue Ghost consumers in RabbitMQ在 RabbitMQ 中排队 Ghost 消费者
【发布时间】:2018-03-18 14:42:55
【问题描述】:

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

例如,rabbitTST 队列RELAY-TASK-PUBLISH-QUESTION-STORERELAY(grails 应用程序)应该是唯一的消费者,它目前在服务器上被关闭,但目前有 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}]" `

【问题讨论】:

    标签: rabbitmq message-queue amqp rabbitmq-exchange


    【解决方案1】:

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

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

    rabbitmqctl list_channels pid name connection consumer_count
    

    通过这种方式,您应该能够识别哪些渠道拥有这些“幽灵”消费者(因为他们将拥有consumer_count &gt; 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 中关闭它。

    【讨论】:

    • 嗨,亚当,非常感谢您的帮助。只是想在 Ghost 消费者的情况下确认 consumer_count > 0 或 consumer_count > 1 ?
    • 我正在使用 RabbitMQ 3.3.5 我也收到以下命令的错误 rabbitmqctl list_connections pid name peer_host peer_port user vhost connected_at 列出连接...错误:{bad_argument,connected_at}
    • 然后删除connected_at,它只是一个时间戳。关于&gt;0&gt;1,这取决于你的应用程序——你需要找到你觉得奇怪的东西。如果您(例如)每个连接只有 1 个使用者,并且您看到 2 个或更多,请尝试将其关闭,并查看故障出现的位置 - 这应该将您指向创建这些“幽灵”使用者的地方。
    • 嗨,亚当,我无法 grep 频道。没有找到结果。我可以看到一些随机通道被添加到管理插件队列的消费者部分。我把他们称为队列的幽灵消费者。关闭连接会有帮助吗?
    • 关闭连接应该会导致消费者出现一些异常,这可能有助于您识别它们。但是看看管理 UI - 你应该能够点击 queue -&gt; consumer -&gt; channel -&gt; connection 找出是谁创造了那个幽灵消费者。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 2016-11-14
    相关资源
    最近更新 更多