春云流兔MQ添加队列参数



我想知道如何向使用 Spring Cloud 流声明的 rabbitmq 队列添加额外的参数。

我想使用RabbitMQ 3.8.x的单活动使用者功能。为此,我必须在队列声明x-single-active-consumer中添加一个额外的参数。
没有办法直接使用弹簧属性配置它。

Spring Cloud 流目前不支持设置任意队列参数。

请针对活页夹打开 GitHub 问题以请求新功能。

但是,只需通过向具有参数集的应用程序添加Queue@Bean来声明队列。

或者,您可以简单地设置exclusive使用者绑定器属性,该属性提供类似的语义;竞争使用者将定期尝试重新连接。

编辑

@SpringBootApplication
@EnableBinding(Sink.class)
public class So59011707Application {
public static void main(String[] args) {
SpringApplication.run(So59011707Application.class, args);
}
@StreamListener(Sink.INPUT)
public void listen(String in) {
System.out.println(in);
}
@Bean
Queue queue() {
return QueueBuilder.durable("so59011707.myGroup")
.withArgument("x-single-active-consumer", true)
.build();
}
@Bean
public ApplicationRunner runner(RabbitTemplate template) {
return args -> {
template.convertAndSend("so59011707", "", "foo");
};
}
}

spring.cloud.stream.bindings.input.destination=so59011707
spring.cloud.stream.bindings.input.group=myGroup

您将在日志中看到一条错误消息

2019-11-24 10:24:22.310 错误 83004 --- [ 127.0.0.1:5672] o.s.a.r.c.缓存连接工厂:通道关闭:通道错误;协议方法:#method(回复代码=406,回复文本=PRECONDITION_FAILED - vhost "/"中队列"so59011707.myGroup"的等效参数"x-single-active-consumer":没有收到,但当前是类型为"bool"的值"true",类 id=50,方法-id=10(

你可以忽略。或者您可以通过将bindQueue设置为 false 并添加ExchangeBinding@Beans 来避免它......

spring.cloud.stream.rabbit.bindings.input.consumer.bind-queue=false
@Bean
Binding binding() {
return BindingBuilder.bind(queue())
.to(exchange())
.with("#");
}
@Bean
TopicExchange exchange() {
return new TopicExchange("so59011707");
}

最新更新