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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有多个路由键的Spring引导流绑定队列相关的知识,希望对你有一定的参考价值。

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

我在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

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

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

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

任何想法如何配置它?

答案

您无法使用流属性执行此操作,但您始终可以使用正常的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文件中添加声明。我没试过,但看起来很有趣。

以上是关于具有多个路由键的Spring引导流绑定队列的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ 如何实现对同一个应用的多个节点进行广播

使用具有不同片段字段的相同中继根查询的多个 react-router-relay 路由

rabbitmq--路由模式

使用 Spring Cloud Stream 将 RabbitMQ 消费者绑定到现有队列

RebbitMQ

RabbitMQ 概念