我正在阅读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调用可以解决问题...
答案 0 :(得分:1)
RabbitMQ团队监视the rabbitmq-users
mailing list,并且有时仅在StackOverflow上回答问题。
文档正确无误,您必须从其自己的渠道/连接中取消使用者。
其他选项包括使您的消费者知道将导致他们自己停止的“取消消息”,或使用close an entire connection的API来关闭与之关联的所有渠道。