使用现有队列/交换机
默认情况下,Binder 会自动创建一个主题交换机,其名称派生自目的地绑定属性 <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
如果您希望 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
时,声明死信交换机/队列也会使用类似的属性。