消息幂等性

  @RabbitHandler
    @RabbitListener(queues = "q1")
    //如何保证消费者的幂等性?
    public void process1(OrderingOk orderingOk) throws IOException {


        // 1. 判断数据库是否存在?
        // 2. 如果存在直接丢弃
        // 3. 如果不存在直接执行下面的业务代码

       log.debug("消费者收到消息 ->  " + msg);
        if (stringRedisTemplate.hasKey(msg.getBizId())) {
            log.warn("BizId: {}该订单已经写入数据库了,直接丢弃", msg.getBizId());
            return false;
        }


       log.debug("{}写入数据库", orderingOk.getOrderId());
        // 我个人认为 时间越长越好, 要根据我们的业务来定
        stringRedisTemplate.opsForValue().set(msg.getBizId(), DateUtil.now(), 10, TimeUnit.DAYS);

        }


    }

你可能感兴趣的:(rabbitMQ,rabbitmq)