编程中的幂等性

一、背景引入以及服务超时的概念

        在微服务架构下,我们创建一个新订单可能会调用很多其他的微服务,比如要查询用户的地址等等。

        此时我们的订单服务就是Consumer服务消费方,查询地址服务就是我们的Provider服务提供方。 这里我是在学习Dubbo时所遇到的服务超时和幂等性的概念。

        在配置Dubbo时,我们可以配置消费者的统一规则:

<!-- 配置当前消费者的统一规则:所有的服务都不检查,超时时间为5秒,重试次数为3次 -->
<dubbo:consumer check="false" timeout="5000" retries="3"></dubbo:consumer>

        服务超时:服务消费方需要调用服务提供方的方法时,但是有可能因为网络等原因,服务提供方执行一个方法需要很长时间,如果很长时间都没有返回而导致大量线程阻塞,这样就会导致性能的极大下降,而我们为了解决这个问题,就可以指定服务超时这个属性,只要在指定时间内没有返回结果,就立即终止线程。

服务超时的覆盖规则

1、精确优先 (方法级优先,接口级次之,全局配置再次之)

2、消费者设置优先(如果级别一样,则消费方优先,提供方次之)

        重试次数:当服务超时报错后,消费方会再次重试调用提供方的服务指定次数。        

        实际开发中服务超时和重试次数属性经常搭配使用,但是配置重试次数属性有一个前提也就是:重试次数属性只能配置在幂等的方法上。

二、什么是幂等性 / 非幂等性

        1、幂等性:所谓的幂等性,是分布式微服务环境下的一个常见问题,一般是指我们在进行多次操作时,所得到的结果是一样的,即多次运算结果相同。

        常见的幂等操作:数据库的 删、改、查

        以上的删改查方法就是典型的幂等操作,也就是说同样的方法,携带同样的参数,无论执行多少次,所导致的结果都是一样的。

        2、非幂等性:与幂等性相反,指执行多次操作时,每次得到的结果是不同的。

        常见的非幂等操作:数据库的新增

        新增方法就算每次执行的是同样的方法,携带同样的参数,但是执行多少次就如插入多少条数据,所以他是非幂等操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值