使用远程过程调用 https://www.rabbitmq.com/tutorials/tutorial-six-java.html模式,我需要将答案发送到回复队列,即我需要将消息发送到默认交换机,并以队列名称作为路由键。
我在 Quarkus 上使用 SmallRye Reactive Messing RabbitMQ 插件。所有通道都是在配置文件中静态定义的(这是可以的),但是,由于配置机制的工作方式(microprofile config),我无法使用空字符串作为配置值,这是默认交换的名称。
省略交易所的名称没有帮助,因为默认情况下使用通道名称。
有没有办法使用 SmallRye RabbitMQ 插件向默认交换器发送消息?
编辑:我无法控制 RabbitMQ 服务器。
您应该能够向default direct RabbitMQ通过设置以下属性进行交换:
- Exchange.name(设置为空字符串)
- Exchange.type(设置为直接)
假设你的反应式消息传递频道已命名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
EDIT
深入挖掘后Smallrye 反应式消息传递实施,我发现空的交换名称将导致回退到频道名称作为交换名称。
因此,应该没有办法发送direct消息发送给默认 RabbitMQ 交换.
替代解决方案,忽略提供的开箱即用功能default交换将是
-
创建一个direct交换没有任何绑定队列并拥有Outgoing
使用专用的消息处理程序channel绑定到它的配置:
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
-
创建一个交替交换配置为我的直接交换路由消息到default一。这可以在RabbitMQ经纪人直接使用rabbitmqctl
:
rabbitmqctl set_policy AE "^my-direct$" '{"alternate-exchange":""}' --apply-to exchanges
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)