RabbitMQ 消费者如何获取生产者设置的correlationId + 得到CorrelationId为空的解决方案 + 源码解析

本文解决:

  • RabbitMQ消息者如何获取生产者设置的correlationId
  • 获取到的CorrelationId为空

本文环境:

springboot 2.1.9.RELEASE + amqp-client-5.4.3.jar

本文分两部分,第一部分先直接给代码实现,第二部分进行原理解析。

实现代码

交换机、路由那些就自己改吧,附上全部代码很累赘,只说关键点

  1. 注册一个bean

    @Bean
    public MessagePostProcessor correlationIdProcessor() {
         
        MessagePostProcessor messagePostProcessor = new MessagePostProcessor() {
         
            @Override
            public Message postProcessMessage(Message message, Correlation correlation) {
         
                MessageProperties messageProperties = message.getMessageProperties();
    
                if (correlation instanceof CorrelationData) {
         
                    String correlationId = ((CorrelationData) correlation).getId();
                    messageProperties.setCorrelationId(correlationId);
                }
                // 可以设置持久化,但与本文无关,因此没有附上
                return message;
            }
    
            @Override
            public Message postProcessMessage(Message message) throws AmqpException {
         
                return message;
            }
        };
        return messagePostProcessor;
    }
    
  2. 生产者发送消息时,使用该bean作为参数

    (除了作为参数传入,还可以全局设置,原理解析会讲)

    // @Bean不指定name时,默认为方法名,此处就是注入上述bean
    @Autowired
    MessagePostProcessor correlationIdProcessor;
    
        public void sendMiaoshaMessage(String msg) {
         
            CorrelationData correlationData = gencorrelationData();
            System.out.println
  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值