Related to How do we hook into before/After message processing using @RabbitListener
如果我想全局配置 RabbitTemplate 并设置 MessagePostProcessor
,最好的方法是什么?
- 我应该从
RabbitAutoConfiguration
复制 bean 定义吗? - 或者我应该使用
BeanPostProcessor
拦截 Bean 定义吗?
第一个解决方案的问题是,
RabbitAutoConfiguration
中的 RabbitTemplate 不仅仅是 bounding bean 实例的属性,还设置消息转换:
MessageConverter messageConverter = this.messageConverter.getIfUnique();
if (messageConverter != null) {
template.setMessageConverter(messageConverter);
}
那么,我应该按如下方式复制此逻辑,还是只遵循 BeanPostProcessor 的第二个选项,如 Sleuth 中所示?
@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
注入(inject)该RabbitTemplate
:
@Autowired
private RabbitTemplate rabbitTemplate;
@PostConstruct
public void init() {
this.rabbitTemplate.setBeforePublishPostProcessors(myMessagePostProcessor());
}
@Bean
public MessagePostProcessor myMessagePostProcessor() {
return message -> null;
}
关于spring-amqp - 在 Spring RabbitTemplate 中全局配置 MessagePostProcessor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53535639/