如何停止使用Java和Python客户端的RabbitMQ?
我使用的Java和Python客户端都是如何停止使用Java和Python客户端的RabbitMQ?,java,python,rabbitmq,pika,Java,Python,Rabbitmq,Pika,我使用的Java和Python客户端都是channel.basicConsume()。在某种程度上,我希望在不停止整个程序的情况下阻止这些消费者 在使用Pika的Python中,我将channel.stop_consuming()调用放在适当的位置,但这些调用会产生我忽略的错误。似乎有效 在Java中,我不知道该怎么做,因为stop_consume()似乎不可用 我看到的所有文档都谈到了创建消费者的所有方法,但我似乎找不到任何说明如何阻止消费者的方法 最好的方法是什么?您应该在一个线程中使用,因
channel.basicConsume()
。在某种程度上,我希望在不停止整个程序的情况下阻止这些消费者
在使用Pika的Python中,我将channel.stop_consuming()
调用放在适当的位置,但这些调用会产生我忽略的错误。似乎有效
在Java中,我不知道该怎么做,因为stop_consume()似乎不可用
我看到的所有文档都谈到了创建消费者的所有方法,但我似乎找不到任何说明如何阻止消费者的方法
最好的方法是什么?您应该在一个线程中使用,因此只需中断该线程,并让程序的其余部分继续运行即可
Thread t = new Thread(){
public void run(){
//consumer is in here
}
};
t.start();
// somewhere else later
t.interrupt();
您可能需要使线程t
在别处可用,并将其作为对象的字段,而不是与is对应的局部变量<代码>基本\u取消将在rabbitmq完成取消后,在\u基本\u取消\u确定上启动提供的回调函数。在短时间内,您可能仍会收到一些消息,请做好准备
请参阅:在我的回答中添加了更多信息这对RabbitMQ不好,因为消息会排队。这是一个可怕的解决方案:它使客户端处于潜在的危险状态,并在服务器上留下@itsafire提到的资源(队列)泄漏,顺便说一句,其答案是正确的。我没有在消费者代码中添加任何内容。在连接到队列的这部分代码中,如果队列是自动删除的,则不会有消息排队,因为不会有消息进入的队列。什么?这个答案是完全的B.S.,比如,100%完全是虚构的。你到底为什么要在一根线里消费?这不是封锁行动。因此,首先,您不应该在线程中消费,其次,中断线程不会做任何事情,因为线程无论如何都会完成。即使如此,假设的阻塞消费函数如何处理中断?它不会抛出一个中断异常
。正确答案的次数是无限的。对于Java用户,请使用。仅当您希望停止在此期间发送的所有worker和blackhole消息时,才解除队列绑定。