如何在Spring Cloud Stream Rabbitmq中使用Rabbitmq的当前交换和队列名称

时间:2019-05-30 07:55:28

标签: spring stream cloud spring-rabbitmq

我正在将旧版Spring应用程序切换为Spring Boot。

使用Spring Cloud Stream Rabbitmq迁移Rabbitmq代码存在问题。

在旧系统中,rabbitmq队列是通过提供交换,routingKey和队列名称来设置的。

例如

stringRequest.setShouldCache(false);

因此,在rabbitmq管理视图中,我可以看到 交换是mq-test.topic,队列是aa.mq-test。

但是在春季云流中,队列名称上标有目的地,例如

mq-test.topic.aa.mq-test

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

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

我也代表bindingRoutingKey使用routingKeyExpression属性,但是结果是相同的。

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

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

请参阅RabbitMQ活页夹文档Using Existing Queues/Exchanges

  

默认情况下,绑定器将自动提供主题交换,其名称是从目标绑定属性的值派生的。如果未提供,则目的地默认为绑定名称。绑定使用者时,将自动使用name设置队列。 (如果指定了组绑定属性),或者在没有组的情况下创建匿名自动删除队列。对于非分区绑定,队列将使用“ match-all”通配符路由键(#)绑定到交换机。前缀默认为空字符串。如果使用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

     

...