是否可以通过Spring Cloud Stream从隐式绑定到默认RabbitMQ交换的某个特定队列中消费?
正如我在BindingService.bindConsumer(...)
中的调试中所看到的,如果我将bindingTargets
指定为空字符串(yaml中的''),则destination
字符串数组为空,因此没有绑定消费者({{ 1}})发生。
我可能的解决方法是指定一些随机目标,并将标记binder.bindConsumer(...)
设置为queueNameGroupOnly
。
答案 0 :(得分:1)
默认情况下,使用者将队列destination.group
绑定到使用路由键destination
的主题交换#
。
<强> 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>