使用现有的队列/交换机
默认情况下,binder 会自动配置一个主题交换器(topic exchange),其名称由目标绑定属性 <prefix><destination>
的值派生而来。如果未提供目标(destination),则默认为绑定的名称。当绑定消费者时,将自动配置一个队列,其名称为 <prefix><destination>.<group>
(如果指定了 group
绑定属性),或者在没有 group
时配置一个匿名的、自动删除的队列。队列将使用“匹配所有”通配符路由键(#
)绑定到交换器(对于非分区绑定),或者使用 <destination>-<instanceIndex>
(对于分区绑定)。默认情况下,前缀为空字符串(String
)。如果输出绑定指定了 requiredGroups
,将为每个组配置一个队列/绑定。
有许多特定于 RabbitMQ 的绑定属性,允许你修改这种默认行为。
如果你希望使用现有的交换器/队列,可以完全禁用自动配置功能,假设交换器名为 myExchange
,队列名为 myQueue
,可以按照以下方式进行:
-
spring.cloud.stream.bindings.<binding name>.destination=myExchange
-
spring.cloud.stream.bindings.<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
如果您希望 binder 自动创建队列/交换机,但又希望使用不同于此处讨论的默认设置,请使用以下属性。有关更多信息,请参阅上述属性文档。
spring.cloud.stream.rabbit.bindings.<binding name>.consumer.bindingRoutingKey=myRoutingKey
spring.cloud.stream.rabbit.bindings.<binding name>.consumer.exchangeType=<type>
spring.cloud.stream.rabbit.bindings.<binding name>.producer.routingKeyExpression='myRoutingKey'
在声明死信交换/队列时,如果 autoBindDlq
为 true
,也会使用类似的属性。