使用现有队列/交换机

默认情况下,绑定器将自动预配一个主题交换机,其名称将从目标绑定属性 <prefix><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

如果您希望绑定器预配队列/交换机,但希望使用此处讨论的默认值以外的其他值来进行预配,请使用以下属性。有关更多信息,请参阅上面的属性文档。

  • 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'

autoBindDlqtrue 时,声明死信交换机/队列时,会使用类似的属性。