具有多个路由键的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引导流绑定队列的主要内容,如果未能解决你的问题,请参考以下文章
使用具有不同片段字段的相同中继根查询的多个 react-router-relay 路由