背景
在某个需要延时发送消息的业务场景中,使用了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版权协议,转载请附上原文出处链接和本声明。