spring-boot - @RabbitListener - 从属性定义队列

标签 spring-boot spring-amqp

可以使用逗号分隔的属性来定义要监听的队列吗?目的是能够在不更改代码的情况下更改队列名称和队列数量。

我在 application.properties 中定义了队列像这样:

my.aggregate.queues=/some/queue,/some/other/queue

我可以使用 SpEL 将队列名称包含为列表如此:
@Value("#{'${my.aggregate.queues}'.split(',')}")

但是,当我尝试使用 @RabbitListener 监听队列时注释我发现我必须单独定义队列。使用
@RabbitListener(queues = { "#{'${my.aggregate.queues}'.split(',')}" })

导致队列名称被解析为字符串数组,但不能被使用:
@RabbitListener can't resolve '[Ljava.lang.String;@5396eeb1' as either a String or a Queue

我尝试了各种其他 SpEL 组合,但都没有成功。有没有办法使用 SpEL 动态定义队列?

最佳答案

是的; SpEL 将在 queues 的第一个元素中放置一个队列名称数组。大批。

如果您打开一个 JIRA issue ,我们有可能在下周发布的 1.5 版本中得到修复。

我认为我们需要接受一个评估为逗号分隔字符串的表达式,然后在处理注释时进行拆分。

编辑:

但是,我刚刚意识到 RabbitMQ 允许您创建包含逗号的队列,所以也许我们应该只处理第一个数组元素本身就是一个数组。

关于spring-boot - @RabbitListener - 从属性定义队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32386177/

相关文章:

java - 如何用spring-boot初始化ActiveMQ的SystemUsage?

spring-boot - 多个带有 Spring Boot 的 Rabbitmq 队列

rabbitmq - Spring amqp : How can I read MessageProperties in MessageListenerAdapter

java - SimpleMessageListenerContainer 批量消息处理

spring - 如何通过配置禁用 Rabbit 健康检查

java - 带有 RabbitMQ 的 spring-amqp 没有正常关闭

java - 在 Spring Multi-Tenancy 配置期间 Autowiring Jpa 存储库

java - 如何强制执行 Spring 配置类的加载顺序?

Spring Boot 开发工具关闭它们以进行生产?

java - 关于Spring Boot上传文件大小的问题