目前项目中,有使用到 Redis 的需求。场景如下:
在使用消息队列时,难免会遇到重复消费的事情,因为队列本身不处理这个。
那么就可以使用 Redis 来做一个避免重复消费的操作。
假如你的消息队列是 rocket mq,在消息消费端,获取到的 MessageExt对象,可以拿到消息的 ID。
我们在刚拿到这个ID时,就立刻对其进行存储(可以拼接你自己的业务前缀)。
可以使用 redis 的 setIfAbsent ,也就是 setNx 命令。

每次能够用存储成功 MessageID时,再去执行消费。如果Redis中有了当前的 MessageId,就证明它是之前消费过的,就直接舍弃。从而达到了避免重复消费的效果。
核心代码其实并不多,这里只提供一下公共的配置,以及方法。
代码仓库如下:
https://gitee.com/fengsoshuai/mine-reactive-redis
https://gitee.com/fengsoshuai/customer-redis-feng
对以上代码做了调整,主要是自定义了业务前缀,可以定制化自己的业务需求。
对应在Nacos中的配置如下:
