前言
目前项目中,有使用到 Redis 的需求。场景如下: 在使用消息队列时,难免会遇到重复消费的事情,因为队列本身不处理这个。 那么就可以使用 Redis 来做一个避免重复消费的操作。
假如你的消息队列是 rocket mq,在消息消费端,获取到的 MessageExt对象,可以拿到消息的 ID。 我们在刚拿到这个ID时,就立刻对其进行存储(可以拼接你自己的业务前缀)。 可以使用 redis 的 setIfAbsent ,也就是 setNx 命令。
每次能够用存储成功 MessageID时,再去执行消费。如果Redis中有了当前的 MessageId,就证明它是之前消费过的,就直接舍弃。从而达到了避免重复消费的效果。
代码
核心代码其实并不多,这里只提供一下公共的配置,以及方法。 代码仓库如下: gitee.com/fengsoshuai…
自定义业务
对以上代码做了调整,主要是自定义了业务前缀,可以定制化自己的业务需求。
对应在Nacos中的配置如下: