常见的方法调用都是同步调用,也是被大多数编程语言所支持的,是一种阻塞式的调用方式,主调用方代码一直阻塞直到被调用方返回为止。
面对一些需要比较长的时间才能有响应的应用场景,那么就需要用到异步调用方式,这些方式在SOA结构下不同service之间调用中经常出现。
常见的异步调用方式有:
1、异步单调(Async Oneway)
2、延迟响应(Deferred Response)
3、请求回调(Call back )
异步单调: 这是最简单的异步调用方式。在这种调用方式当中,主调方发出请求之后就不再关心被调方的情况,包括是否执行成功,反回值等都不关心,类似于java语言当中创建线程,并start。异步单向调用可以用在诸如事件通知的场景下,类似于古代太监到一个官员前宣读圣旨,某某官员你升官了,读完后黄马褂金子和其它奖赏你可以去领,领不领太监就不管了,读完后只管去吃喝。领奖赏这件事自然有相应的机制来保证。
正经例子:事件通知场景,类似于短信的发送。短信发出后,发送方不管接收方是否接到消息,继续执行下面的任务。可靠性一般由系统保证。比如接收方接收时出错,有重发机制。重发之后接收方依然出错,就生成一个失败事件,放入数据库里由系统管理员处理,或者在某种情况下自动处置,比如发送者发送失败消息等,这实质上是服务质量保障的内容。
延迟响应:主调方发出请求之后,在请求处理完成之前就很快得到一个票据(Ticket),之后不必等待请求处理完成,继续执行其他任务在需要的时候,主调方使用得到的票据检索返回结果。延迟响应需要大致估计一下请求处理完所需要的时间。
请求回调: 与延迟响应类似,主调方也能得到被调用方的响应,但是不同是的这个响应是由服务端通过回调方法来触发的,而不像延迟响应方式由主调方来主动检索。这种调用方式的原理与许多编程语言中的回调机制类似。经如ajax里的回调,请求发到服务器,响应后会调用回调方法将得到的数据在前端展示出来。