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