兔子监听器注释从 yaml 获取队列名称

Posted

技术标签:

【中文标题】兔子监听器注释从 yaml 获取队列名称【英文标题】:Rabbit listener annotation get queue name from yaml 【发布时间】:2018-02-17 22:09:10 【问题描述】:

我目前将我的兔子监听器注释设置为:

@RabbitListener(queues = "my-queue")

是否无法从我的 yaml 文件中提取队列名称。我想这样做的原因是,我可以将队列更改为集成测试的测试队列,只需更改 yaml 文件中的队列名称即可。看来注释必须接受一个常量字符串,有没有办法解决这个问题?谢谢,

【问题讨论】:

【参考方案1】:

是的,它被称为properties place holder,可以这样完成:

@RabbitListener(queues = "$myQueue.property")

myQueue.property 在您的 yaml 中准确声明的位置。

https://docs.spring.io/spring-amqp/docs/1.7.3.RELEASE/reference/html/_reference.html#async-annotation-driven

参数名称、值和类型可以是属性占位符 ($...) 或 SpEL 表达式 (#...)。名称必须解析为字符串; type 的表达式必须解析为 Class 或类的完全限定名称。该值必须解析为可由 DefaultConversionService 转换为类型的内容(如上例中的 x-message-ttl)。

【讨论】:

如果我必须为多个队列配置监听器怎么办? queues 是多值选项,所以你可以这样做queues = "queue1", "queue2" 这不是我想要的,我应该能够在不更改代码的情况下配置多个队列 嗯,从您的简单评论中并不清楚。因此,您需要在应用程序的属性文件中指定这些队列,并使用相同的属性占位符机制,但包装在这个 SpEL 表达式中:"#'$myQueue.property'.split(',')

以上是关于兔子监听器注释从 yaml 获取队列名称的主要内容,如果未能解决你的问题,请参考以下文章

从 spring application.properties 禁用监听兔子队列

Spring Boot JMS 侦听器:无法刷新目标的 JMS 连接

我在春季启动中有一个兔子 amqp 侦听器,它在不关闭应用程序的情况下保持不变

带有 tibco jms 监听器的 Spring Boot

RabbitMQ 无法声明队列并且监听器无法在服务器上获取队列

扩大/缩小我正在监听多个队列的微服务