我可以将 RabbitMQ 消费者追踪到远程主机吗?

我可以将 RabbitMQ 消费者追踪到远程主机吗?

我经常遇到由于用户错误(忘记关闭某些进程)导致一些额外的消费者正在监听已知 RabbitMQ 队列的情况。当我这样做时,rabbitmqctl list_consumers | grep <queue-name>我可以看到消费者太多(通常是应有数量的两倍),但相关用户通常不知道这些消费者在哪里运行。有没有办法从列表消费者输出到正在运行相关进程的远程主机?我尝试了所有 list_* 子命令,但没有任何效果。

感谢您的任何想法。

答案1

在管理界面找到方向后(感谢@jrhodin),我能够弄清楚如何通过 rabbitmqctl 执行此操作。关键是将 pid 和 name 参数传递给list channels

首先,执行 list_consumers 并获取消费者 pid:

$ sudo rabbitmqctl list_consumers | grep <queue-name>

复制 pid(例如,<[电子邮件保护]>)

然后执行 list_channels 并查找 pid:

$ sudo rabbitmqctl list_channels pid connection name | grep '<your-pid-here>'

输出将显示远程和本地主机作为通道名称的一部分。如果您还想查找连接,可以获取连接 pid(来自上述命令)并通过 list_connections 查找它。

这是一个循环,它将输出给定队列的消费者和通道名称:

for i in $(sudo rabbitmqctl list_consumers | grep <queue-name> | cut -f 2); 
do echo -n "Consumer: " $i; 
echo -n "   Channel: "; 
sudo rabbitmqctl list_channels pid name | grep $i | cut -f 2; 
done

示例输出:

Consumer:  <[email protected]>   Channel: xx.x.xx.159:8247 -> xxx.xx.xx.119:5671 (1)
Consumer:  <[email protected]>   Channel: xx.x.xx.159:9002 -> xxx.xx.xx.119:5671 (1)
Consumer:  <[email protected]>   Channel: xx.x.xx.159:7298 -> xxx.xx.xx.119:5671 (1)
Consumer:  <[email protected]>   Channel: xx.x.xx.159:12113 -> xxx.xx.xx.119:5671 (1)
Consumer:  <[email protected]>   Channel: xx.x.xx.159:14212 -> xxx.xx.xx.119:5671 (1)

答案2

您可以跟踪连接(在几乎所有情况下),但我认为rabbitmqctl单独通过它是不可能实现的。

編輯:它有可能,只是需要多次查询。请参阅@em-bo 的回答。

在管理界面中您可以点击该通道,然后在详细信息部分查看它属于哪个连接。

频道视图

相关内容