兔子监听器注释从 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 侦听器,它在不关闭应用程序的情况下保持不变