使用现有队列/交换器
默认情况下,绑定器会自动预配一个主题交换器,其名称由目标绑定属性<prefix><destination>的值派生而来。如果未提供,目标默认为绑定名称。当绑定消费者时,如果指定了group绑定属性,将自动预配一个名为<prefix><destination>.<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
如果您希望绑定器预配队列/交换器,但希望使用此处讨论的默认设置以外的其他方式进行,请使用以下属性。有关更多信息,请参阅上面的属性文档。
-
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时,声明死信交换器/队列时也会使用类似的属性。