2013-03-21 86 views
3

我有两个Java和Python客户端,我使用channel.basicConsume()。在某种程度上,我希望在不停止整个计划的情况下阻止这些消费者。如何停止在Java和Python客户端上使用RabbitMQ?

在与皮卡Python我已经把channel.stop_consuming()调用的地方,但那些生成的错误,我忽略。似乎工作

在Java中,我不知道如何做到这一点,因为stop_consume()似乎不可用。

我看到的所有文档都谈到了创建消费者的所有方法,但我似乎无法找到任何显示如何阻止它们的方法。

什么是最好的方式去做这件事?

回答

-2

你应该在一个线程中消耗所以只是中断该线程,并留下你的程序的其余部分运行

Thread t = new Thread(){ 
    public void run(){ 
    //consumer is in here 
    } 
}; 
t.start(); 

// somewhere else later 
t.interrupt(); 

您可能需要使对象的Thread t其他地方买有它的场而不是局部变量

+0

如何中断该线程? – noisygecko 2013-04-02 22:40:25

+0

在我的回答中添加了更多信息 – robthewolf 2013-04-03 07:16:06

+0

这对RabbitMQ不利,因为消息会排队。 – itsafire 2013-07-17 11:04:16

7

basic_consume的计数器部分是basic_cancel。当rabbitmq完成取消操作时,basic_cancel会触发提供的on_basic_cancel_ok回调函数。准备好一段时间,你仍然可以收到一些消息。

请参阅:Pika Channel

+0

正确的答案时间无限。对于Java人来说,使用['Channel#basicCancel(String)'](http://www.rabbitmq.com/releases/rabbitmq-java-client/v3.1.5/rabbitmq-java-client-javadoc-3.1.5/com /rabbitmq/client/Channel.html#basicCancel%28java.lang.String%29)。 – 2013-09-06 01:07:14

+0

如果您希望在此期间停止* all * workers *和* blackhole消息,则仅解除绑定队列。 – djechlin 2013-10-22 15:10:17

+0

你是对的@djechlin。我编辑了我的答案。 – itsafire 2013-10-23 07:27:07