消费端幂等性
1.接口幂等性
1.1:什么是接口的幂等性
接口的幂等性::简而言之,就是对接口发起的一次调用和多次调用,所生产的结果都是一致的。
某些接口具有天然的幂等性:
比如长查询接口,不管是查询一次还是多次,返回的结果都
是一致的
1.2:若接口没有保障幂等性会出现什么问题
比如订单提交的过程中,用户点了一次提交,但是由于网络等原因,导致后端处理延时,客户就连
续点击了多次,在没有幂等性的条件下,那么就会造成订单的重复提交。
1.3:如何解决
在保存订单的时候,根据生成的系统全局唯一ID(这里订单号+业务类型),并且把该唯一ID 调用
redis 的setnx命令保存起来,在第一次保存的时候,由于redis中没有该key,那么就会
把全局唯一ID 进行设置上,此时订单就会保存成功,。这个时候若出现前端重复点击按钮, 由于第一步已经
setnx上了 就会阻止后面的保存。
2.MQ的幂等性
2.1:消息重复发送的原因
为了保障消息的百分之百的投递,我们使用了消息重发,确认机制,使得消息可能被重复发送。
2.2:MQ如何解决幂等问题
还是把对每条消息做生成一个唯一性的ID
通过redis的来setnx命令来保证幂等性。
2.3:MQ服务端如何保证幂等性
消息队列的服务中,对每一条消息都会生成一个全局唯一的与业务无关的ID(inner_msg_id),当mq_server接受到消息的时候,先根据inner_msg_id是否需要重复发送,再决定消息是否落DB,这样保证每条消息都只会落一次DB