gpt4 book ai didi

java - RabbitMQ:如何指定要发布到的队列?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:27:37 27 4
gpt4 key购买 nike

RabbitMQ 的Channel#basicConsume 方法为我们提供了以下参数:

channel.basicConsume(queueName, autoAck, consumerTag, noLocal,
exclusive, arguments, callback);

让我们能够准确地告诉 RabbitMQ 我们要从哪个队列中消费。

但是 Channel#basicPublish 没有这样的等价物:

channel.basicPublish(exchangeName, routingKey, mandatory, immediateFlag,
basicProperties, messageAsBytes);

为什么我不能在这里指定要发布的队列?!? 我如何获得一个Channel 发布到一个名为logging 的队列?提前致谢!

最佳答案

为了扩展@Tien Nguyen 的回答,RabbitMQ 中有一个“作弊”可以有效地让您直接发布到队列。每个队列都自动绑定(bind)到 AMQP 默认交换器,队列的名称作为路由键。默认交换也被称为“无名交换”——即它的名字是空字符串。因此,如果您使用等于队列名称的路由键发布到名为 "" 的交换器,消息将只发送到该队列。正如@John 所说,它正在经历一场交流,它只是您不需要声明或约束自己的交流。

我没有方便的 Java 客户端来尝试此代码,但它应该可以工作。

channel.basicPublish("", myQueueName, false, false, null, myMessageAsBytes);

也就是说,这在很大程度上违背了 RabbitMQ 的工作原理。对于正常的应用程序流程,您应该声明和绑定(bind)交易所。但对于特殊情况,“作弊”可能会有用。例如,我相信这就是 Rabbit 管理控制台允许您手动将消息发布到队列的方式,而无需所有创建和绑定(bind)交换的仪式。

关于java - RabbitMQ:如何指定要发布到的队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18531308/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com