Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何停止使用Java和Python客户端的RabbitMQ?_Java_Python_Rabbitmq_Pika - Fatal编程技术网

如何停止使用Java和Python客户端的RabbitMQ?

如何停止使用Java和Python客户端的RabbitMQ?,java,python,rabbitmq,pika,Java,Python,Rabbitmq,Pika,我使用的Java和Python客户端都是channel.basicConsume()。在某种程度上,我希望在不停止整个程序的情况下阻止这些消费者 在使用Pika的Python中,我将channel.stop_consuming()调用放在适当的位置,但这些调用会产生我忽略的错误。似乎有效 在Java中,我不知道该怎么做,因为stop_consume()似乎不可用 我看到的所有文档都谈到了创建消费者的所有方法,但我似乎找不到任何说明如何阻止消费者的方法 最好的方法是什么?您应该在一个线程中使用,因

我使用的Java和Python客户端都是
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消息时,才解除队列绑定。