有关 How do we hook into before/After message processing using @RabbitListener
如果我想全局配置RabbitTemplate并设置MessagePostProcessor
,最好的方法是什么?
RabbitAutoConfiguration
复制bean定义吗? BeanPostProcessor
截取bean定义?第一个解决方案的问题是
RabbitAutoConfiguration
中的RabbitTemplate不仅是bean实例的bounding属性,而且还设置了消息转换:
MessageConverter messageConverter = this.messageConverter.getIfUnique();
if (messageConverter != null) {
template.setMessageConverter(messageConverter);
}
因此,我应该重复以下逻辑,还是像Sleuth那样遵循BeanPostProcessor
的第二个选项?
@ConfigurationProperties(prefix = "spring.rabbitmq.template")
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory,
ObjectProvider<MessageConverter> messageConverterObjectProvider) {
RabbitTemplate template = new RabbitTemplate(connectionFactory);
MessageConverter messageConverter = messageConverterObjectProvider.getIfUnique();
if (messageConverter != null) {
template.setMessageConverter(messageConverter);
}
template.setBeforePublishPostProcessors(myBeforePublishMPP());
return template;
}
答案 0 :(得分:1)
我想说的是,@Autowired
足以RabbitTemplate
并将MessagePostProcessor
注入到RabbitTemplate
中:
@Autowired
private RabbitTemplate rabbitTemplate;
@PostConstruct
public void init() {
this.rabbitTemplate.setBeforePublishPostProcessors(myMessagePostProcessor());
}
@Bean
public MessagePostProcessor myMessagePostProcessor() {
return message -> null;
}
答案 1 :(得分:1)
我会首先采用这种方式来应用application.properties,但是要像在Sleuth中一样更改方法签名以接收ObjectProvider< MessageConverter>
。