我正在阅读Rabbitmq https://www.rabbitmq.com/consumer-cancel.html中有关Channel.basicCancel操作的文档。该文档说,一种可能的取消情况是消费者在其监听的同一频道上发送取消信号。

这是唯一的可能性吗?您可以取消在不同通道/连接/进程上运行的远程使用者吗?

我正在尝试从另一个进程发送取消请求。当我这样做时,它以java.io.IOException: Unknown consumerTag异常结束,就像这种操作仅限于取消本地使用者(在自己的通道或连接上)一样。

更新:

我注意到此“Unknown ConsumerTag”异常是com.rabbitmq.client.impl.ChannelN.basicCancel(String)内的初始验证的结果:

 Consumer originalConsumer = (Consumer)this._consumers.get(consumerTag);
 if (originalConsumer == null) {
   throw new IOException("Unknown consumerTag");
 }
 ...

但是仍然可能有一些rpc调用可以解决问题...

最佳答案

RabbitMQ团队监视the rabbitmq-users mailing list,仅在某些情况下回答有关StackOverflow的问题。

该文档是正确的,您必须从其自己的渠道/连接中取消使用者。

其他选项包括让您的消费者知道将导致他们自己停止的“取消消息”,或使用API​​到close an entire connection,这将关闭与之关联的所有渠道。

关于java - 您可以远程取消rabbitmq用户吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50967488/

10-15 14:16