一种消息消费失败的处理方案
场景
在生产环境中,经常会遇到,我们在接受对方发送过来的MQ之后,由于我们的处理异常,但是kafka集群误以为我们正常消费,导致消息丢失的场景。
解决方案
通常情况下,消息的发送方不是我们自己。有两种解决方案。
1.自行组装消息,重新消费
将接受的消息进行重新组装成自己的方法参数格式,在try catch之中,重新去调用方法消息。
优点:无第三方服务介入。复杂性降低。
缺点:如果说消息体本身有问题,比如说,参数格式异常之类,会导致消息消费陷入死循环。
2.异步重消费
引入Redis,消费失败之后,在catch里,将消息lpush到redis,定时去从redis里面rpop拿数据。
优点:各种格式的异常数据,不会阻塞消息的消费,后面push到里面的异常消息。还能消费到。
缺点:引入Redis一定程度上增加了复杂性。如果lpush的过程中异常了,没法处理。需要人力介入了。
另外就是,如果lpush的异常数据很多,会导致队列里很多消息没法消费。
版权声明: 本文为 InfoQ 作者【undefined】的原创文章。
原文链接:【http://xie.infoq.cn/article/e29cbca1740e4041bdc924cb5】。未经作者许可,禁止转载。
评论