1.3 同步调用和异步调用
我们知道,常见的方法调用都是同步调用,这种调用方式是一种阻塞式的调用方式,即客户端(主调用方)代码一直阻塞等待直到被服务端(被调用方)返回为止。这种调用方式相对比较直观,也是大部分编程语言直接支持的一种调用方式。但是,如果我们面对是基于粗粒度的服务组件,面对的是一些需要比较长时间才能有响应的应用场景,那么我们就需要一种非阻塞式调用方式,即异步调用方式。
SCA编程模式提供了三种方式的异步调用,它们分别是:
1. 单向调用方式。
2. 延迟响应方式。
3. 请求回调方式。
单向调用
单向调用方式是最为简单的异步调用方式,在这种调用方式中,客户端发出请求之后就不再关心服务端的情况,包括是否执行成功,返回值是什么等等。我们可以用下面的图 4示来描述这种单向调用方式:
图 4: 单向调用
单向调用方式是一种不管调用结果的方式,但是在很多情况下我们是需要知道调用结果的。我们需要知道调用是否成功,需要知道调用的结果,就算调用失败我们也希望知道错误代码等信息。在这种情况下,延迟响应和请求回调就是两种能够让我们知道调用结果的方式。
延迟响应方式
延迟响应方式是指客户端在发出调用请求之后继续执行,但是经过一段时间之后,客户端再调用相应的方法去检索返回结果,并通过参数指定如何根据调用的结果而执行进一步动作。由于是异步调用方式,因此,在第一次发出调用请求的时候,服务端需要返回一个称为票据(Ticket)的对象。这个对象会作为第二次发出检索结果请求时的一个参数。显然,这个Ticket对象的作用与WEB编程的SessionID非常类似。我们可以用图 5 来表示延迟相应调用方式:
图 5:延迟响应调用方式
请求回调
与延迟响应方式类似,请求回调方式也能得到服务端的响应,但是不同的是这个响应是由服务端通过回调方式来触发的,而不像延迟响应方式由客户端来主动检索的。请求回调方式的原理与许多编程语言中的回调机制类似,不同的是这里实现的层次比较高一点。我们可以用图6来表示请求调用方式:
图 6:请求回调方式
1.4 SCA客户端的两种调用方式
从接口的角度,SCA的客户端编程模型有两种方式:
1. 静态调用方式
2. 动态调用方式
静态调用方式
静态调用方式是一种类型安全的方式,也是在一般Java编程中最为常见的方式。所谓类型安全指的就是在编译的时候就做类型的检查,而不是等到运行的时候发现类型错误问题。说明示例如下:
在SCA客户端编程中,静态方式就是直接拿到实际实现的接口类型,也即直接拿到Java接口。
动态调用方式
与静态调用方式相对,动态调用方式是一种非安全的方式。它的优点是调用非常灵活,但同时带来的不利之处是部分问题在编译的时候是发现不了的,只有等到运行的时候才能发现。说明示例如下:
像上面例子所示,在动态调用方式中,客户端通过invoke方法的字符串参数的方式来指定具体要调用的方法名称。很显然,在这种方式下,如果方法名有误是不能在编译时发现的。
关于动态调用方式另外要注意的一点是,在这种调用方式下,所有参数传递都是通过DataObject的方式,即SDO的方式。哪怕实际参数只是一个字符串,也需要包装成一个DataObject的方式。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
如何透过业务和技术看SOA的发展
随着SOA发展的深入,各种SOA相关技术标准也随之发展和完善。面对庞大而复杂的SOA相关技术标准,我们如何来有选择的使用它们呢?
-
SOA架构下补偿模型驱动的安全苛求软件开发
随着我国高速铁路的快速发展,传统的计算机联锁软件开发方法在灵活性、可维护性、安全性以及开发效率上都显露出不足,怎样才能弥补这一不足呢?
-
浅谈基于SOA架构的服务集成技术研究
在近几年软件行业的发展中,面向服务架构(SOA)成为了当下的热门话题。那么对于SOA架构的服务集成你又了解多少?
-
揭秘WebSphere Process Server中SCA组件的事务实现机制
SCA作为一种新的编程模型,自然也需要提供完整的事务支持。所幸的是WPS本身是基于WebSphere Application Server的,所以底层天然就具有了强大的事务处理能力。