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

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

  • 使用redis加锁机制,生产者向中间价发送消息的时候会生成一个唯一的id,将id作为key使用setnx保存到redis中去。在消费端在去setnx看返回值,消费端代码如下:
    //Redis中操作,判断是否已经操作过 TODO
        boolean flag =  jedis.setNX(key);
                  if(flag){
                        //消费
                  }else{
                       //忽略,重复消费
                }
  • 数据库去重表 ,某个字段使用Message的key做唯一索引

你可能感兴趣的:(消息队列怎么避免重复消费)