异步
异步的概念
异步(Asynchronous, async)是与同步(Synchronous, sync)相对的概念。
在我们学习的传统单线程编程中,程序的运行是同步的(同步不意味着所有步骤同时运行,而是指步骤在一个控制流序列中按顺序执行)。
而异步的概念则是不保证同步的概念,也就是说,一个异步过程的执行将不再与原有的序列有顺序关系。
简单来理解就是:同步按你的代码顺序执行,异步不按照代码顺序执行,异步的执行效率更高。
异步就是从主线程发射一个子线程来完成任务。
比如批量下单,批量转账,一个批次一千笔,甚至一万笔的,你则可以把接口设计为异步。就是用户发起批量转账时,持久化成功就先返回受理成功。
然后用户隔十分钟或者十五分钟等再来查转账结果就好。又或者,批量转账成功后,再回调上游系统。
异步 API 怎么测试?
异步 API 是指,调用后会立即返回,但是实际任务并没有真正完成,而是需要稍后去查询或者回调(Callback)的 API。
比如,被测 API A 完成的是下订单的操作。这个 API A 完成下订单操作要通过调用另外一个 API B 将订单信息写入到消息队列中去。
而真正下订单成功指的是消息队列中的消息被后续服务正确处理并且成功了。此时,这里的后续消息处理就是异步的操作了。
那么现在测试这个 API A,通常情况下:
- 我只需要验证它是否正确地发起了对 API B 的调用即可。
- 不用关心 API B 的具体行为结果。
以前测试过消息中心系统,接受的消息最终要等于生产的消息,之间有时间差,消息接受完,
消息的发送与接收数量要对得上,而且消息接收者不能错乱。
幂等:
什么是幂等?
百度百科的解释:
幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。
在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,
是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。
例如,“setTrue()”函数就是一个幂等函数,无论多次执行,其结果都是一样的.更复杂的操作幂等保证是利用唯一交易号(流水号)实现。
抢红包、转账以及支付等这些重要接口是需要考虑幂等性的
最直观的业务场景,就是用户连着点击两次,连续快速点击,
接口能不能抗住。或者消息队列出现重复消费的情况,你的业务逻辑怎么控制?