如何将 rabbitmq 的当前交换和队列名称与春云流 rabbitmq 一起使用



我正在将传统的弹簧应用程序切换到弹簧启动。

使用春季云流 rabbitmq 迁移 rabbitmq 代码存在问题。

在遗留系统中,rabbitmq队列是通过提供交换,路由密钥和队列名称来设置的。

例如

exchange name = mq-test.topic
routingKey = mq-test
queueName = aa.mq-test

所以在 rabbitmq 管理视图中我可以看到 Exchange 是 mq-test.topic,queue 是 aa.mq-test。

但是对于春季云流,队列名称点缀着目的地,例如

MQ-test.topic.aa.mq 测试

我对春天云流的属性是这样的。

spring.cloud.stream.bindings.channelName.destination=mq-test.topic
spring.cloud.stream.bindings.channelName.producer.bindingRoutingKey=mq-test
spring.cloud.stream.bindings.channelName.producer.requiredGroups=aa.mq-test

我还使用路由键表达式属性来代表绑定路由键,但结果是相同的。

有些旧版应用程序通过队列名称使用数据,而我的新应用程序仅在生成,因此我无法更改交换和队列名称策略。

如何保持与春季云流的交换/队列命名?

任何帮助不胜感激。

请参阅 RabbitMQ Binder 文档 使用现有队列/交换。

默认情况下,绑定

程序将自动预配主题交换,其名称派生自目标绑定属性的值。如果未提供,则目标默认为绑定名称。绑定使用者时,将自动预配队列名称 。(如果指定了组绑定属性)或匿名的自动删除队列(如果没有组)。队列将使用"全部匹配"通配符路由键 (#) 绑定到交换,对于非分区绑定,或 - 对于分区绑定。默认情况下,前缀为空字符串。如果使用 requiredGroups 指定了输出绑定,则将为每个组预配一个队列/绑定。

有许多特定于 Rabbit 的绑定属性允许您修改此默认行为。

如果您有要使用的现有交换/队列,则可以完全禁用自动配置,如下所示,假设该交换名为myExchange,队列名为myQueue:

spring.cloud.stream.binding.<binding name>.destination=myExhange

spring.cloud.stream.binding.<binding name>.group=myQueue

spring.cloud.stream.rabbit.bindings.<binding name>.consumer.bindQueue=false

spring.cloud.stream.rabbit.bindings.<binding name>.consumer.declareExchange=false

spring.cloud.stream.rabbit.bindings.<binding name>.consumer.queueNameGroupOnly=true

最新更新