RabbitMq RabbitMq重复消费等问题解决方案

415 阅读2分钟

阿里巴巴的《码出高效》中有一句话,说做技术的,要有两种品质,一是热爱,二是卓越,做事光靠喜欢是不行,还要靠韧性,还要耐靠,就像婚姻只有爱情是不行的,还要有面对柴米油盐,矛盾摩擦时的忍让,但是如果没有热爱,也是不行,前几年听到一句玩笑话,程序员不是面向对象开发,而是面向金钱开发,说的很有趣,事物的开端离不开物质,可是事物发展了以后,更离不开的就是精神了,要不怎么要建设精神文明呢,理想主义的红砖墙上用来粉饰的灰,如果没有热爱,最终一定是枯燥不堪的。

前面说了RabbitMq的优缺点,那发生了缺点要怎么处理呢,总不能束手无策吧,产品经理是给用户提供更好产品解决方案的人,那程序员就是给技术问题,提供更高解决方案的人。

几个问题,重复消费问题,消息丢失问题,顺序消费问题

1 重复消费问题

这个问题的引发原因是网络问题,比如客户端明明消费成功了,但是网络出了问题,导致服务端认为客户端没有消费,造成消息的重复推送。

解决方案

1)强校验

我们可以在服务端建立一张表,专门存储那些消息被消费成功了,然后进行校验哪些已经被消费了就不处理了。

2)弱校验

将消费的消息存储在redis里,设置过期时间,用于校验

2 消息丢失

1)生产者消息丢失

 这种设置发送成功之后一个返回值就可以了

2)队列消息丢失

 做一个持久化到硬盘处理

3)客户端消息丢失

 也是接收消息后设定一个返回值

3 顺序消费

保证如队列的顺序正常,客户端出现多线程处理的时候要保证消息的顺序,可以运用锁。