【问题标题】:How to use current exchange and queue name of rabbitmq with spring cloud stream rabbitmq如何将rabbitmq的当前交换和队列名称与spring cloud stream rabbitmq一起使用
【发布时间】:2019-05-30 07:55:27
【问题描述】:

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

使用spring cloud streamrabbitmq迁移rabbitmq代码存在问题。

在遗留系统中,rabbitmq队列是通过给出exchange、routingKey和队列名称来建立的。

例如,

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

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

但是使用spring cloud stream,队列名称会点缀着目的地,例如

mq-test.topic.aa.mq-test

我的spring cloud stream的属性是这样的。

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

我也使用了 routingKeyExpression 属性来代表 bindingRoutingKey 但结果是一样的。

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

如何使用 Spring Cloud Stream 保持交换/队列命名?

感谢任何帮助。

【问题讨论】:

    标签: spring stream cloud spring-rabbit


    【解决方案1】:

    请参阅 RabbitMQ Binder 文档Using Existing Queues/Exchanges

    默认情况下,绑定器将自动提供一个主题交换,其名称源自目标绑定属性的值。如果未提供,则目标默认为绑定名称。绑定消费者时,将自动为队列提供名称。 (如果指定了组绑定属性),或者没有组时的匿名自动删除队列。对于非分区绑定或 - 对于分区绑定,队列将使用“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

    ...

    【讨论】:

    • 从什么版本的兔夹和弹簧靴开始有这个功能?
    • 主要功能was added in 1.3.1 并记录在2.0.0
    • 感谢您的回复加里。这适用于退出队列,只有队列名称是“exchange.queue”。但是我们现有的队列并没有遵循该命名约定,即使它们绑定到主题交换。是否有任何配置属性告诉 binder 查找队列?
    • 查看 queueNameGroupOnly
    猜你喜欢
    • 2019-11-06
    • 2021-06-07
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 2017-04-28
    • 2021-09-06
    • 2017-11-24
    • 2017-06-04
    相关资源
    最近更新 更多