如何从RabbitMQ断开连接

8

我有一个应用程序存在一些漏洞。由于某种原因,当应只存在一个消费者时,会创建2个消费者,并且其中一个不再检查消息。

我可以通过列出服务器上的队列和消费者数量来检测这种情况。是否有一种从服务器端销毁该消费者的方法?


1
如果您想以编程方式删除消费者,可以在RabbitMQ通道上调用cancel方法。 - asgs
3个回答

13

使用 rabbitmqctl 命令中的 close_connection 输入参数 connectionpid 可以杀死消费者。

例如:

> rabbitmqctl close_connection "<rabbit@hardys-Mac-mini.1.4195.0>" "reason here"

连接 PID 可以通过以下方式获取

> rabbitmqctl list_consumers

Listing consumers ...
send_email_1    <rabbit@hardys-Mac-mini.1.4185.0>   amq.ctag-oim8CCP2hsioWc-3WwS-qQ true    1   []
send_email_2    <rabbit@hardys-Mac-mini.1.4195.0>   amq.ctag-WxpxDglqZQN2FNShN4g7QA true    1   []

RabbitMQ 3.5.4


10
您可以使用rabbitmqctl工具(请参阅手册页面)或使用Web UI来终止与RabbitMQ代理的连接。您还可以清除并删除属于恶意消费者的队列。

但是,您不能使用这些工具终止消费者进程本身。您真的应该专注于修复应用程序中的错误,以便只创建正确数量的消费者。


那个确实起作用了,几乎。由于某种原因有两个消费者,但只有一个连接分配给其中一个。另一个消费者就...存在着。现在正在寻找这种情况的解释。 - viraptor
不知道...如果你重新启动你的经纪人,问题还存在吗? - Brian Kelly

0

您需要将您的消费者标记为“独占”。然后只有一个消费者会注册到队列中,其他消费者即使尝试从该队列获取数据也会被忽略。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接