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

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

@RabbitListener(queues = "my-queue")

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

【问题讨论】:

    标签: spring-boot rabbitmq spring-rabbit


    【解决方案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(',')}
    猜你喜欢
    • 2015-10-13
    • 2020-06-13
    • 2019-07-03
    • 2019-06-03
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多