通常情况下,对于投递到RabbitMQ的消息,我们一般都会指定一个唯一的msgId来标识一条消息,跟踪这条消息的状态。通常情况下,我们的代码都是这样的:
- 生产者端:
- 消费者端:
但是这样的代码的结果是:message.getMessageProperties().getCorrelationIdString()
拿到的是null, (String) headers.get("spring_listener_return_correlation");
拿到的不是我们在生产者set的值,更像是spring框架自动生成的用于标记被rabbitMQ退回的消息。(这个结果可能跟springboot的版本有关系)
现提出另外一种解决方案:自定义header
- 生产者
- 消费者
- 进行测试
并且这个ID似乎在同一个批次里面是一样的
总结:之所以会发现这个问题,是因为在查看日志监控消息流转的过程中发现,使用message.getMessageProperties().getCorrelationIdString()
的消费者,根本拿不到生产者设置的id。然后百度。
改成使用header,spring_listener_return_correlation
的方式,但是发现取到的值不是我们设置的。所以最后就通过自定义header的方式,传递这个msgId。
所以百度的代码在使用的过程中要注意查看程序的运行状态是否符合预期。 这个代码的结果可能跟Springboot 的版本有关系,我们公司使用的Springboot版本非常低,所以具体情况具体分析~ 这边只是提供一个思路。