如何在Java和Python客户端中停止RabbitMQ的消费?

5 投票
2 回答
8879 浏览
提问于 2025-04-17 19:55

我有用Java和Python写的客户端,都是通过channel.basicConsume()来接收消息的。到某个时候,我想停止这些消息接收者,但又不想停止整个程序。

在Python中,我使用Pika库,调用了channel.stop_consuming()来停止接收,但这会产生一些错误,我选择忽略这些错误,似乎还是能正常工作。

在Java中,我不太确定该怎么做,因为没有找到类似的stop_consume()方法。

我看到的文档大多讲的是如何创建消息接收者,但我找不到关于如何停止它们的相关内容。

那么,最好的解决办法是什么呢?

2 个回答

-2

你应该在一个线程里进行处理,所以只需要中断那个线程,其他的程序可以继续运行。

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

// somewhere else later
t.interrupt();

你可能需要让Thread t在其他地方也能用,可以把它作为对象的一个属性,而不是一个局部变量。

9

basic_consume 相对应的功能是 basic_cancel。当你调用 basic_cancel 时,它会在 RabbitMQ 完成取消操作后,触发你提供的 on_basic_cancel_ok 回调函数。不过要注意,在这段时间里,你可能还会收到一些消息。

更多信息请查看: Pika Channel

撰写回答