Spring Cloud Stream:使用默认的Rabbit MQ交换和特定队列

时间:2018-05-15 08:09:21

标签: spring-cloud-stream

是否可以通过Spring Cloud Stream从隐式绑定到默认RabbitMQ交换的某个特定队列中消费?

正如我在BindingService.bindConsumer(...)中的调试中所看到的,如果我将bindingTargets指定为空字符串(yaml中的''),则destination字符串数组为空,因此没有绑定消费者({{ 1}})发生。

我可能的解决方法是指定一些随机目标,并将标记binder.bindConsumer(...)设置为queueNameGroupOnly

2 个答案:

答案 0 :(得分:1)

默认情况下,使用者将队列destination.group绑定到使用路由键destination的主题交换#

请参阅the documentation

  

<强> queueNameGroupOnly

     

如果为true,则从名称等于该组的队列中进行消耗。否则,队列名称为destination.group。例如,当使用Spring Cloud Stream从现有RabbitMQ队列中使用时,这很有用。

     

默认值:false。

要从仅绑定到默认交换的现有队列中使用,您需要。

spring.cloud.stream.bindings.input.destination=<doesn't matter, can be omitted; defaults to input>
spring.cloud.stream.bindings.input.group=<the name of the queue>
spring.cloud.stream.rabbit.bindings.input.consumer.bind-queue=false
spring.cloud.stream.rabbit.bindings.input.consumer.queue-name-group-only=true
spring.cloud.stream.rabbit.bindings.input.consumer.declare-exchange=false

queueNameGroupOnly专门为此用例添加。

答案 1 :(得分:0)

有可能,您只需指定您输入的目的地&#39;和/或&#39;输出&#39;应该进行绑定。 您可以通过以下属性执行此操作:

spring.cloud.stream.bindings.input.destination=<the name of the input queue>
spring.cloud.stream.bindings.input.group=<the name of the input group>

spring.cloud.stream.bindings.output.destination=<the name of the output exchange>