Jan*_*ski 4 rabbitmq spring-boot
我已经通过 application.yaml 和 spring configurationProperties 配置了我的兔子属性。因此,当我配置交换、队列和绑定时,我可以使用属性的 getter
@Bean Binding binding(Queue queue, TopicExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with(properties.getQueue());
}
@Bean Queue queue() {
return new Queue(properties.getQueue(), true);
}
@Bean TopicExchange exchange() {
return new TopicExchange(properties.getExchange());
}
Run Code Online (Sandbox Code Playgroud)
但是,当我配置 @RabbitListener 以记录队列中的消息时,我必须使用完整的属性名称,例如
@RabbitListener(queues = "${some.long.path.to.the.queue.name}")
public void onMessage(
final Message message, final Channel channel) throws Exception {
log.info("receiving message: {}#{}", message, channel);
}
Run Code Online (Sandbox Code Playgroud)
我想避免这种容易出错的硬编码字符串,并参考configurationProperties bean,如下所示:
@RabbitListener(queues = "${properties.getQueue()}")
Run Code Online (Sandbox Code Playgroud)
我曾经在 @EventListener 中遇到过类似的问题,其中使用 bean 引用“@bean.method()”有所帮助,但它在这里不起作用,bean 表达式只是解释为队列名称,这会失败,因为队列名称“@bean” ....“ 不存在。
是否可以使用 ConfigurationProperty-Beans 进行 RabbitListener 队列配置?
这样的东西对我有用,我只使用了 Bean 和 SpEL。
@Autowired
Queue queue;
@RabbitListener(queues = "#{queue.getName()}")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15411 次 |
最近记录: |