我正在将传统的弹簧应用程序切换到弹簧启动。
使用春季云流 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
。