消息队列怎么避免重复消费

消息中间件是无法保证消息重复消费,所以只能从业务上来保证消费不重复消费,在消费端保证接口的幂等性。有以下两种方案。

  • 使用redis加锁机制,生产者向中间价发送消息的时候会生成一个唯一的id,将id作为key使用setnx保存到redis中去。在消费端在去setnx看返回值,消费端代码如下:
    //Redis中操作,判断是否已经操作过 TODO
        boolean flag =  jedis.setNX(key);
                  if(flag){
                        //消费
                  }else{
                       //忽略,重复消费
                }
  • 数据库去重表 ,某个字段使用Message的key做唯一索引
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 五种数据结构简介 Redis是使用C编写的,内部实现了一个struct结构体redisObject对象,通过结构体...
    彦帧阅读 11,866评论 0 14
  • 包含的重点内容:JAVA基础JVM 知识开源框架知识操作系统多线程TCP 与 HTTP架构设计与分布式算法数据库知...
    消失er阅读 9,833评论 1 10
  • 1.1 资料 ,最好的入门小册子,可以先于一切文档之前看,免费。 作者Antirez的博客,Antirez维护的R...
    JefferyLcm阅读 17,187评论 1 51
  • 本文精心整理了书籍、博客以及本人面试中遇到的基础知识点,方便大家快速回顾知识。 参考: https://githu...
    蛮三刀酱阅读 4,444评论 0 4
  • TCP 与 HTTP http1.0 和 http1.1 有什么区别。 HTTP 1.0主要有以下几点变化: 请求...
    冷枫abc阅读 3,401评论 0 0