DKW*_*Woo 1 cloud spring stream spring-rabbit
我正在将传统的 Spring 应用程序切换到 Spring Boot。
使用 spring cloud stream rabbitmq 迁移 rabbitmq 代码存在问题。
在遗留系统中,rabbitmq 队列是通过提供交换、路由密钥和队列名称来设置的。
例如,
exchange name = mq-test.topic
routingKey = mq-test
queueName = aa.mq-test
Run Code Online (Sandbox Code Playgroud)
所以在rabbitmq 管理视图中我可以看到exchange 是mq-test.topic,queue 是aa.mq-test。
但是对于 Spring Cloud 流,队列名称点缀着目的地,例如
mq-test.topic.aa.mq-test
我的 spring 云流属性是这样的。
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
Run Code Online (Sandbox Code Playgroud)
我还代表 bindingRoutingKey 使用了 routingKeyExpression 属性,但结果是一样的。
有遗留应用程序通过队列名称使用数据,而我的新应用程序仅生成数据,因此我无法更改交换和队列名称策略。
如何使用 Spring Cloud 流保持交换/队列命名?
任何帮助表示赞赏。
请参阅 RabbitMQ Binder 文档Using Existing Queues/Exchanges。
默认情况下,活页夹将自动提供主题交换,其名称源自目标绑定属性的值。如果未提供,目标默认为绑定名称。绑定消费者时,队列将自动提供名称。(如果指定了组绑定属性),或者没有组时的匿名自动删除队列。对于非分区绑定或 - 对于分区绑定,队列将使用“全部匹配”通配符路由键 (#) 绑定到交换。前缀默认为空字符串。如果使用 requiredGroups 指定了输出绑定,则将为每个组提供一个队列/绑定。
有许多特定于兔子的绑定属性允许您修改此默认行为。
如果您有想要使用的现有交换/队列,则可以按如下方式完全禁用自动配置,假设交换名为 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...
| 归档时间: |
|
| 查看次数: |
2235 次 |
| 最近记录: |