spring-amqp - 在 Spring RabbitTemplate 中全局配置 MessagePostProcessor

标签 spring-amqp

Related to How do we hook into before/After message processing using @RabbitListener

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

  1. 我应该从 RabbitAutoConfiguration 复制 bean 定义吗?
  2. 或者我应该使用 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/

相关文章:

rabbitmq - 如何使用非线程安全的 MessageListener 实现并发

java - Spring 集成 pubsub 与 Spring amqp RabbitMQ pubsub

java - 如何在测试配置中使用相同的bean但具有不同的属性?

java - Spring AMQP : would like to put message to queue and send ACK immediately

java - 重新连接 spring amqp

java - 如何在 @RabbitListener 中创建有状态服务

java - 在 RabbitMQ 中组接收消息,最好使用 Spring AMQP?

spring - 如何在 Spring AMQP 中使用拦截器

java - 使用发布者确认设置默认超时

spring-amqp - 将rabbitmq消费者分离并重新连接到交易所