如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性?

要保证消息不被重复消费,其实就是要保证消息消费时的幂等性。幂等性:无论你重复请求多少次,得到的结果都是一样的。例如:一条数据重复出现两次,数据库里就只有一条数据,这就保证了系统的幂等性。

那么如何保证幂等性呢?

  1. 写数据时,先根据主键查一下这条数据是否存在,如果已经存在则 update;

  2. 数据库的唯一键约束也可以保证不会重复插入多条,因为重复插入多条只会报错,不会导致数据库中出现脏数据;

  3. 如果是写 redis,就没有问题,因为 set 操作是天然幂等性的。

发表评论

后才能评论

评论(2)