使用远程过程调用模式,我需要将答案发送到回复队列,即我需要将消息发送到默认交换机,并以队列名称作为路由键。
我在 Quarkus 上使用 SmallRye Reactive Messing RabbitMQ 插件。所有通道都是在配置文件中静态定义的(这是可以的),但是,由于配置机制的工作方式(microprofile config),我无法使用空字符串作为配置值,这是默认交换的名称。
省略交易所的名称没有帮助,因为默认情况下使用通道名称。
有没有办法使用 SmallRye RabbitMQ 插件向默认交换器发送消息?
编辑:我无法控制 RabbitMQ 服务器。
您应该能够通过设置以下属性将消息发送到default直接RabbitMQ交换:
假设您的 Reactive Messaging 通道名为 pets-out,这里有一个配置示例:
mp.messaging.outgoing.pets-out.connector=smallrye-rabbitmq
mp.messaging.outgoing.pets-out.exchange.name=
mp.messaging.outgoing.pets-out.exchange.declare=false
mp.messaging.outgoing.pets-out.exchange.type=direct
mp.messaging.outgoing.pets-out.default-routing-key=pets
深入研究smallrye-reactive-messaging实现后,我发现空的交换名称将导致回退到通道名称作为交换名称。
因此,应该无法将直接消息发送到默认 RabbitMQ 交换。
另一种解决方案,忽略提供的开箱即用的默认交换将是
创建一个direct交换没有任何绑定队列,并使用绑定到它的专用
channel配置来拥有
Outgoing
消息处理程序:
mp.messaging.outgoing.pets-out.connector=smallrye-rabbitmq
mp.messaging.outgoing.pets-out.exchange.name=my-direct
mp.messaging.outgoing.pets-out.exchange.declare=true
mp.messaging.outgoing.pets-out.exchange.type=direct
mp.messaging.outgoing.pets-out.default-routing-key=pets
为my-direct交换路由消息创建备用交换配置到默认交换路由消息。这可以直接使用 rabbitmqctl
在
RabbitMQ代理上操作:
rabbitmqctl set_policy AE "^my-direct$" '{"alternate-exchange":""}' --apply-to exchanges