在Spring RabbitTemplate中全局配置MessagePostProcessor



与我们如何使用@RabbitListener 连接到消息处理之前/之后

如果我想全局配置RabbitTemplate并设置MessagePostProcessor,最好的方法是什么?

  1. 我应该从RabbitAutoConfiguration复制bean定义吗
  2. 还是应该使用BeanPostProcessor截取bean定义

第一个解决方案的问题是,RabbitAutoConfiguration中的RabbitTemplate不仅将属性绑定到bean实例,还设置消息转换:

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;
}

我想说,有足够的@Autowired一个自动配置的RabbitTemplate,并将您的MessagePostProcessor注入该RabbitTemplate:

@Autowired
private RabbitTemplate rabbitTemplate;
@PostConstruct
public void init() {
this.rabbitTemplate.setBeforePublishPostProcessors(myMessagePostProcessor());
}
@Bean
public MessagePostProcessor myMessagePostProcessor() {
return message -> null;
}

我会用第一种方法来实现,以便应用application.properties,但要像在Sleuth中那样更改方法签名以接收ObjectProvider< MessageConverter>

最新更新