具有多个路由键的Spring引导流绑定队列

时间:2018-05-25 09:49:30

标签: spring-boot rabbitmq spring-rabbitmq

我需要使用多个路由键绑定单个队列。

我在application.properties中有配置:

spring.cloud.stream.bindings.some-channel1.destination=exch
spring.cloud.stream.bindings.some-channel1.group=a-queue
spring.cloud.stream.rabbit.bindings.some-channel1.consumer.binding-routing-key=event.domain1

spring.cloud.stream.bindings.some-channel2.destination=exch
spring.cloud.stream.bindings.some-channel2.group=a-queue
spring.cloud.stream.rabbit.bindings.some-channel2.consumer.binding-routing-key=event.domain2

这在兔子中正确地创建了队列和绑定,但最后在运行应用程序之后我得到了:

org.springframework.cloud.stream.binder.BinderException: Exception thrown while starting consumer: 

在完成上述所有配置后,我仍然不好,因为我需要单通道。但队列绑定了路由键列表。

任何想法如何配置它?

1 个答案:

答案 0 :(得分:2)

您无法使用流属性执行此操作,但您始终可以使用正常的Spring AMQP声明添加额外的绑定...

@SpringBootApplication
@EnableBinding(Sink.class)
public class So50526298Application {

    public static void main(String[] args) {
        SpringApplication.run(So50526298Application.class, args);
    }

    @StreamListener(Sink.INPUT)
    public void listen(String in) {
        System.out.println(in);
    }

    // extra bindings...

    @Bean
    public TopicExchange exch() {
        return new TopicExchange("exch");
    }

    @Bean
    public Queue queue() {
        return new Queue("exch.a-queue");
    }

    @Bean
    public Binding extraBinding1() {
        return BindingBuilder.bind(queue()).to(exch()).with("event-domain2");
    }

}

还有一个third party "advanced" boot starter允许您在yaml文件中添加声明。我没试过,但看起来很有趣。