跳到主要内容
版本:5.0.1

使用现有队列/交换机

DeepSeek V3 中英对照 Using Existing Queues/Exchanges

默认情况下,绑定器会自动创建一个主题交换机,其名称由目标绑定属性 <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'

当 autoBindDlq 为 true 时,声明死信交换/队列时使用了类似的属性。