rabbitmq - Spring Cloud Stream RabbitMQ 添加队列参数
问题描述
我想知道如何向使用 spring 云流声明的 rabbitmq 队列添加额外的参数。
我想为RabbitMQ 3.8.x使用 Single Active Consumer 功能。为此,我必须在队列声明中添加一个额外的参数x-single-active-consumer
。
没有办法直接用spring属性进行配置。
解决方案
Spring Cloud Stream 目前不支持设置任意队列参数。
请针对活页夹打开GitHub 问题以请求新功能。
Queue
@Bean
但是,您可以通过使用参数集向应用程序添加 a 来简单地声明队列。
或者,您可以简单地设置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] osarcCachingConnectionFactory:通道关闭:通道错误;协议方法:#method(reply-code=406,reply-text=PRECONDITION_FAILED - vhost '/' 中队列 'so59011707.myGroup' 的不等价参数 'x-single-active-consumer':没有收到,但当前是值' 'bool' 类型的 true',class-id=50,method-id=10)
你可以忽略它。bindQueue
或者您可以通过设置为 false 并添加Exchange
and来避免它Binding
@Bean
......
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");
}
推荐阅读
- python - 如何根据相似字段对元组列表进行分组,然后根据另一个字段保持最大值?(不使用熊猫)
- ios - 如何在 Swift 中为 UIRefreshControl 添加可访问性
- python - 为什么我的 SQL 查询参数没有返回正确的值?
- groovy - 基于shell脚本的groovy分配映射
- asp.net-mvc - 使用 EPPlus Excel - 如何忽略 excel 错误检查或删除单元格左上角的绿色标记。(c#)
- javascript - 有没有办法在 Spring 应用程序的 JSP 页面中将 Arraylist 从 Controller 类传递到 Javascript?
- azure - U-SQL Azure Data Lake Analytics 按日期搜索文件
- phpstorm - 如何从 PhpStorm 中的项目中排除单个文件,使其不显示在搜索中?
- mysql - MySQL - 1075 表定义不正确,只能有一个自动列,必须定义为键
- python - 优化一个我不会使用的主键