前面的文章分析了Rocketmq消息队列的常用功能原理,涉及到如下内容:
Rocketmq消息中间件实现了消息队列的基本功能,如消息发送,集群消费,广播消费,也实现了消息堆积,事务消息,定时消息,顺序消息等高级功能。
Rocket常见问题分析总结:
一、如何保证消息不重复消费
在Rocketmq中每条消息都有一个唯一的key代表不同消息实体,Rocketmq本身并不保证消息不被重复消费,它通过重试机制保证消息至少被消费者消费一次,因此可能在网络抖动情况下出现消息重复投递的情况,如何达到消息不被重复消费呢?
这里介绍笔者工作中常用的两种方式:
1、消息消费记录表
消息业务id作为主键或者唯一id,每次消费前判断是否存在消费记录,可以尝试插入操作,如果已经存在则会报主键冲突(类似于redis的setNx指令效果)。存在则不消费,否则继续消费。
2、通过redis的setnx指令
Redis Setnx(SET