RocketMq解决消息重复消费的问题

文章介绍了如何使用RocketMq结合Redis解决业务端消息去重问题。通过记录msgID,当新消息到来时检查其是否已被记录,若已存在则抛弃,否则进行消费。在Redis中使用incr方法判断msgID的唯一性,并设置两分钟的失效时间,确保消息不会被重复消费。

一、RocketMq解决业务端去重步骤:
1、记录下每个消息的msgID
2、新消息来的时候,查看该消息的msgID是否已记录,是则抛弃,否则消费
二、RocketMq一般用redis进行记录,该msg是否被记录
1、消费端接收到消息的时候,调用redis提供的incr自增方法,以msgID作为key(具有唯一性),value则默认从1开始递增。

2、当incr返回值为1时,设置其失效时间为两分钟以后(每个msgID保留两分钟足矣!),并且该消息需要被消费。
3、当incr返回的值大于1时,直接跳过,不消费。

public long incr(String key,Date Expirem){
	long count=redisNumber.incr(key,default_increnment);
	if(count==1){
		redisCache.seeExpireTime(key,Expirem);
	}
	return count;
}
for(String msg:msgs){
	long currentTime=System.currentTimeMillis();
	currentTime +=Constant.MSG_EXPIRES_TIME_MILLIS;
	Date date=new Date(currentTime);
	long msgIdCount=redisCacheHelper.incr(msg.getKey(),date);
	if(msgIdCount>1){
		countinue;
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值