Spring Cloud Stream单个队列绑定多路由键的配置问题
解决单个队列绑定多个路由键的Spring Cloud Stream配置问题
你的问题出在使用了两个独立的通道绑定同一个消费组(对应RabbitMQ的队列),Spring Cloud Stream不允许这种重复绑定操作,所以启动时抛出了BinderException。要实现单个队列绑定多个路由键,只需要用单个通道,并通过逗号分隔的方式配置多个路由键即可。
正确的配置方案
只需要保留一个通道,在binding-routing-key中用逗号分隔多个路由键:
spring.cloud.stream.bindings.some-channel.destination=exch spring.cloud.stream.bindings.some-channel.group=a-queue spring.cloud.stream.rabbit.bindings.some-channel.consumer.binding-routing-key=event.domain1,event.domain2
配置说明
some-channel:单个消费通道,所有匹配指定路由键的消息都会通过这个通道接收destination=exch:指定消息对应的RabbitMQ交换机名称group=a-queue:消费组名称,对应RabbitMQ中实际创建的队列(默认命名规则为交换机名.消费组名,即exch.a-queue)binding-routing-key=event.domain1,event.domain2:通过逗号分隔多个路由键,实现单个队列与多个路由键的绑定关系
原配置报错的原因
你之前的配置创建了两个独立通道some-channel1和some-channel2,且都指向同一个消费组a-queue。Spring Cloud Stream会为每个通道创建独立的消费者绑定逻辑,当两个绑定尝试关联同一个队列时,就会出现资源冲突,最终导致启动时抛出绑定异常。
内容的提问来源于stack exchange,提问作者Damianeusz
相关产品推荐
相关产品推荐

