专利名称:一种分布式服务端框架及其使用、交互、请求处理方法
技术领域:
本发明涉及服务端技术领域,特别涉及互联网络服务体系结构的一种基于消息队列的分布式服务端框架。
背景技术:
在传统的服务端中,往往都是为前台客户端与存储接口所量身定制的。因此,该类服务端的通用性、可扩展性都比较差,而且维护的成本比较高。一旦出现新的需求与服务,就要花费不少的时间去维护与修改原来的代码。现在,需求的快速变更以及服务的多元化越来越普遍。原来传统单一的服务端已经难以满足社会的需求了。相反,通用的高扩展性松耦合结构的服务端将会逐渐成为服务端技术领域的主流。解决前述技术问题最有效的方法就是设计一种通用的服务端框架,取消服务端对前台客户端和存储接口的依赖关系,把它从中脱离出来。1C (Inversion of Control),直观地讲,就是容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在。1C还有另外一
个名字D1- “依赖注入(Dependency Injection)”。相对1C而言,“依赖注入”更加准
确地描述了 1C的设计理念。所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,形象地说,即由容器动态地将某种依赖关系注入到组件之中。从本质上来说,1C和DI都是将组件和组件的之间的关系的依赖由原来的依赖“目标组件”改变为现在的依赖于“容器”。AOP (Aspect-Oriented Programming),面向切面编程,当前已经成为一种比较成熟的编程技术,可以用来很好地解决应用系统中分布于各个模块的交叉关注点问题。换句话说,就是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。其机理来自于代理模式,目的就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的。在控制反转和面向切面编程技术的使用上,Spring框架无疑是最典型的成功例子,用于管理对象。
发明内容
本发明解决的技术问题之一在于针对服务端组件的可移植性和可重用度低,灵活性和可扩展性不足的问题,提供一种松耦合通用的分布式服务端框架。实现对客户端请求和存储服务进行动态绑定、逻辑组件和通用服务组件的分离,从而大大提高该框架的灵活性、移植性和可扩展性。本发明解决的技术问题之二在于提供一种实现松耦合通用的分布式服务端框架的使用方法。本发明解决的技术问题之三在于提供一种实现松耦合通用的分布式服务端框架与其他应用和服务之间的交互模式方法。本发明解决的技术问题之四在于提供一种实现松耦合通用的分布式服务端框架内部请求处理方法。本发明解决上技术问题之一的技术方案是:所述的框架由动态依赖绑定、消息处理、过程调用构成;所述的动态依赖绑定,包括配置信息类以及依赖绑定类;通过依赖注入将操作请求者、参数的定位信息、响应定位信息、服务提供者四个元素动态地联系起来,形成一个新的整体;所述的消息处理,包括过程调用前的消息解析以及过程调用后的响应封装两个模块,该两模块作为应用逻辑组件被分离出来,根据动态依赖绑定提供的依赖关系统一进行消息处理;所述的过程调用,主要涉及代理模式、单态模式和反射调用;代理模式分别是通用接口、代理、真实对象,代理、真实对象实现同一接口,将真实对象作为代理的一个属性,向客户端公开代理;当客户端调用代理时,代理结合反射调用,调用真实对象方法,在调用之如之后提供相关的服务。本发明解决上技术问题之二的技术方案是:将请求操作与服务方法之间的依赖关系以及参数的定位信息都写入到框架的配置信息之后,服务端就以请求消息为参数调用框架的消息处理部分的消息解析模块,返回解析结果;服务端以解析结果为参数调用框架的过程调用部分,反射调用相应的服务方法,返回调用结果;服务端以调用结果为参数调用框架的消息处理部分的响应封装模块,返回响应结果;框架的每一个部分都会自动读取配置信息,从而作出正确的处理。本发明解决上技术问题之三的技术方案是:采用异步消息的松耦合交互模式;客户端需要调用服务时,向消息中心发送操作消息,消息订阅客户端从队列中获取消息,消息订阅客户端通过调用本框架的接口实现消息解析、过程调用和响应封装这三个步骤,最后将框架中所返回的响应发送回消息中心。本发明解决上技术问题之四的技术方案是:请求消息先经过消息处理部分的消息解析模块进行解析,解析过后交给过程调用部分来调用相应服务接口,再将调用结果交给消息处理部分的响应封装模块,把结果封装成请求所想要得到的形式,最后返回封装过后的响应结果;另外,由动态依赖绑定部分向其他两个部分提供依赖关系配置信息。本发明基于通用服务端消息调用框架的思路,将服务端从传统一一对应的模式中脱离出来,成为一种轻量型通用的松耦合结构的编程框架。该框架提供一种“消息处理和过程调用”的技术,以一种通用的方式对不同类型的操作消息进行统一的消息处理和过程调用。并且能够动态的修改请求与服务之间的依赖关系,使服务端能够迅速响应不同的需求变更。在架构方面,提高了组件的可移植性和可重用度,因为依赖注入机制减轻了组件之间的依赖关系;在实现方面,能够更简洁的编程实现。本发明的框架不仅可以管理对象,还可以用来做消息解析、执行分布式过程调用等工作,属于一个分布式的编程框架。本发明本框架和方法的主要特点是:解耦,主要有两个形式的体现:第一个体现是:框架中的各个部分之间,包括框架的核心类代码之间和框架与所在的框架平台之间,尽量形成一种松耦合的结构,使得框架有更多的灵活性,从而达到如果替换某个层而不影响整体架构。第二个体现是:框架与其所在的上层应用系统的解耦。
在实现这两种形式的体现方面,框架内部的类之间的解耦主要通过控制反转的技术来实现,框架与上层应用系统的解耦借助面向切面的技术来实现。本框架通过“动态依赖绑定”这个部分的配置来对一个个切面进行定义,至于“消息处理”部分就属于面向切片编程中的增强,他定义了切面了中的实际逻辑,比如消息解析和响应封装的实际代码。最后在“过程调用”部分,通过代理来执行切面逻辑,其中代理是指实际业务对象的代理对象。
下面结合附图对本发明进一步说明:图1是本发明框架总体结构图;图2是本发明框架与其他应用和服务之间的交互方法框图;图3是本发明框架内部请求执行的数据流程框图。
具体实施例方式见图1所示,表示了本框架的总体结构图,通用消息处理和过程调用框架由动态依赖绑定、消息处理、过程调用这三个部分构成。其中动态依赖绑定包括配置信息类以及依赖绑定类;消息处理包括消息解析和响应封装。另外,本框架与其他组件共同构成一个消息订阅客户端。本框架进行设计和开发时遵循的以下3条基本原则:1.在代码中不直接创建目标对象,但是描述创建它们的方式。2.在代码中不直接与服务对象连接,但使用配置数据来描述哪一个组件需要哪一项服务。3.程序在运行时,由容器负责将这些对象关联在一起。动态依赖绑定:该部分通过依赖注入将操作请求者、参数的定位信息、响应定位信息、服务提供者这四个元素动态地联系起来,形成一个新的整体。因为依赖注入机制减轻了组件之间的依赖关系,这也是J2EE平台倡导“松藕合”的系统开发要求。这样将能够大大地减少对象的请求者对服务提供者的特定实现逻辑的依赖,因为我们已经将依赖的具体“定位信息”从请求者中分离出来。有关示例说明如下表所示:
权利要求
1.一种基于消息队列的分布式服务端框架,其特征在于:所述的框架由动态依赖绑定、消息处理、过程调用构成; 所述的动态依赖绑定,包括配置信息类以及依赖绑定类;通过依赖注入将操作请求者、参数的定位信息、响应定位信息、服务提供者四个元素动态地联系起来,形成一个新的整体; 所述的消息处理,包括过程调用前的消息解析以及过程调用后的响应封装两个模块,该两模块作为应用逻辑组件被分离出来,根据动态依赖绑定提供的依赖关系统一进行消息处理; 所述的过程调用,主要涉及代理模式、单态模式和反射调用;代理模式分别是通用接口、代理、真实对象,代理、真实对象实现同一接口,将真实对象作为代理的一个属性,向客户端公开代理;当客户端调用代理时,代理结合反射调用,调用真实对象方法,在调用之前之后提供相关的服务。
2.权利要求1所述的框架的使用方法,其特征在于:将请求操作与服务方法之间的依赖关系以及参数的定位信息都写入到框架的配置信息之后,服务端就以请求消息为参数调用框架的消息处理部分的消息解析模块,返回解析结果;服务端以解析结果为参数调用框架的过程调用部分,反射调用相应的服务方法,返回调用结果;服务端以调用结果为参数调用框架的消息处理部分的响应封装模块,返回响应结果;框架的每一个部分都会自动读取配置信息,从而作出正确的处理。
3.权利要求1所述的框架与其他应用和服务之间的交互方法,其特征在于:采用异步消息的松耦合交互模式;客户端需要调用服务时,向消息中心发送操作消息,消息订阅客户端从队列中获取消息,消息订阅客户端通过调用本框架的接口实现消息解析、过程调用和响应封装这三个步骤,最后将框架中所返回的响应发送回消息中心。
4.权利要求1所述的框架的请求处理方法,其特征在于:请求消息先经过消息处理部分的消息解析模块进行解析,解析过后交给过程调用部分来调用相应服务接口,再将调用结果交给消息处理部分的响应封装模块,把结果封装成请求所想要得到的形式,最后返回封装过后的响应结果;另外,由动态依赖绑定部分向其他两个部分提供依赖关系配置信息。
全文摘要
本发明涉及服务端技术领域,特别涉及互联网络服务体系结构的一种基于消息队列的分布式服务端框架。本发明利用控制反转,实现对客户端请求和存储服务进行动态绑定;另一方面,利用面向切片编程,实现应用逻辑组件和通用服务组件的分离,从而大大提高该框架的灵活性、移植性和可扩展性。本发明解决了现有服务端为前台客户端与存储接口所量身定制,通用性、可扩展性都比较差的问题;可以用于服务端架构中。
文档编号H04L29/08GK103152433SQ201310101140
公开日2013年6月12日 申请日期2013年3月26日 优先权日2013年1月14日
发明者谢毅, 肖翱, 吴冠权, 岳强 申请人:广东电子工业研究院有限公司