如何知道MQ已消费完所有消息

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/heihu_malice7/article/details/78954081

最近做了个项目,碰到一个问题,目前已经解决,解决过程共享出来。

项目中用到了MQ的中间件,每天大概生产700万+的消息,生产耗时<消费耗时。

需求是我要把当天的消费情况及时落地,问题在于我不知道什么时候消费完所有消息,最主要的是,我不想写定时任务。

方案1:打标,就是在生产消息的时候把最后一条数据打标,从而在消费的时候能知道哪一条数最后一条数据,当执行完该条数据时,就可以进行数据落地操作,但是考虑到MQ是集群部署的,也就是说可能是乱序的,此方案PASS。

方案2监听器,监听消费端的某个必执行的方法范围时间内是否被调用,如果未被调用则可认定为已经消费完。前后考虑此方案可行。

方案3检查生产、消费的数量,需要对生产及消费进行incr计数,当消费总数等于生产总数时,就可以认定消费已完成,最终确定此方案也OK。

由于工期问题,我选择的是方案3,同时方案3有几个地方需要注意

1、生产计数要在生产完所有消息后才能进行计数。

2、需要考虑消息丢失、重复消费的问题,最后我是用异步来处理数据落地的时机的。

 

其实我更认为方案2可靠性更高,但是考虑到改动的范围有点大,最后没有考虑方案2.


猜你喜欢

转载自blog.csdn.net/heihu_malice7/article/details/78954081