关于RocketMQ采用one-way方式发送延时消息的一些疑问

关于RocketMQ采用one-way方式发送延时消息的一些疑问


背景

在某个需要延时发送消息的业务场景中,使用了RocketMQ的one-way方式进行发送,但一直没有达到延时的效果,排查了很久之后,看了下源码,才发现此方式下(one-way)似乎不支持延时的设置。

过程

one-way,在RocketMQ方式下是单向发送方式,与同步发送和异步发送的区别之一在于它不需要得到响应,只负责发送即可。结合业务特点(个人感觉不需要太可靠),于是采用one-way方式发送。但在实践过程中,一直没有达到延时的效果。后续对比了三种方式的源码发现了问题:

  • sendOneWay方式里,没有设置delayLevel
    在这里插入图片描述
  • async方式发送会设置delayLevel
    在这里插入图片描述
  • sync方式发送会设置delayLevel
    在这里插入图片描述

结果

最后不得已采用async方式发送了,但好奇的是为啥单单one-way方式不支持呢?是有出于什么设计上的考虑还是说仅仅只是懒呢?另外,在排查过程中花了些时间,还有个原因就是对我们业务封装的RocketMQ发送方式过于信赖了,如果直接采用RocketMQTemplate发送,会发现人家压根就没有delayLevel 这个参数。


版权声明:本文为legendaryhaha原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。