Spring环境下CorrelationData,msgId的使用方法

通常情况下,对于投递到RabbitMQ的消息,我们一般都会指定一个唯一的msgId来标识一条消息,跟踪这条消息的状态。
通常情况下,我们的代码都是这样的:

  • 生产者端:


    image.png
  • 消费者端:


    image.png

但是这样的代码的结果是:message.getMessageProperties().getCorrelationIdString()拿到的是null, (String) headers.get("spring_listener_return_correlation");拿到的不是我们在生产者set的值,更像是spring框架自动生成的用于标记被rabbitMQ退回的消息。(这个结果可能跟springboot的版本有关系)

现提出另外一种解决方案:自定义header

  • 生产者


    image.png
  • 消费者


    image.png
  • 进行测试


    image.png

image.png

并且这个ID似乎在同一个批次里面是一样的
image.png


总结:之所以会发现这个问题,是因为在查看日志监控消息流转的过程中发现,使用message.getMessageProperties().getCorrelationIdString()的消费者,根本拿不到生产者设置的id。然后百度。

image.png

image.png

image.png

该成使用header,spring_listener_return_correlation的方式,但是发现取到的值不是我们设置的。所以最后就通过自定义header的方式,传递这个msgId。

所以百度的代码在使用的过程中要注意查看程序的运行状态是否符合预期。
整个代码的结果可能跟Springboot 的版本有关系,我们公司使用的Springboot版本非常低,所以具体情况具体分析~ 这边只是提供一个思路。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容