一种基于订阅模式的中间件调用系统的制作方法

文档序号:8257996阅读:151来源:国知局
一种基于订阅模式的中间件调用系统的制作方法
【技术领域】
[0001]本发明属于互联网技术领域,具体涉及一种基于订阅模式的中间件调用系统。
【背景技术】
[0002]针对项目开发中涉及相互调用的多个项目,为保证编译、运行时均能够正常无误的运行,需要引入一套可以提供不同项目之间相互调用的机制。这套机制需要支持一对多、多对多的调用方法。一对多是指暴露一套可以提供给任意项目调用的接口,这些项目无需知道接口的实现逻辑。多对多也是暴露一套接口,但是与一对多不同的是,这套接口可以执行不同的实现,这些实现由相应的订阅者执行。
[0003]该中间件主要针对以下的设计模式而做改良,在asp.net开发中,如图1所示:(其中,BLL项目为需要调用的源项目,Stu项目和Sync项目为被调用项目)
A.Stu项目引用BLL项目,即在编译时直接依赖于项目BLL ;
B.Sync项目引用BLL项目,即在编译时直接依赖于项目BLL ;
C.BLL项目引用Stu的类库,即在编译时间接依赖于项目BLL ;
D.BLL项目引用Sync的类库,即在编译时间接依赖于项目BLL ;
这种项目中的相互调用设计的后果是,任意一个项目编译失败后,容易导致全部项目都无法重新编译,因为某项目编译时会删除相应的类库文件,成功后会生成新的类库文件,也就是说失败后就缺少类库文件了,而缺少类库文件,BLL项目就无法编译。

【发明内容】

[0004]为了克服上述技术问题,本发明的目的在于提供一种基于订阅模式的中间件调用系统。
[0005]本发明采用的技术方案是:
一种基于订阅模式的中间件调用系统,包括:
至少一源项目,用于接收用户的Web请求以调用相应的目标项目;
一中间件,该中间件用于提供项目之间调用的接口 ;
至少一目标项目,该目标项目经中间件所提供的接口供源项目调用其所包含的类的方法数据。
[0006]进一步,所述中间件包括消息转发引擎、订阅器、中间件接口定义模块以及中间件接口实现模块,该消息转发弓I擎用于传输源项目与目标项目之间的数据,中间件接口定义模块用于定位所述接口所在的目标项目,中间件接口实现模块用于定位目标项目中实现所述接口的类;订阅器利用提供中间件接口定义模块和中间件接口实现模块提供的属性订阅目标项目中实现所述接口的类的方法,并由消息转发引擎反馈所述方法的数据至源项目。
[0007]进一步,所述订阅器实现所述订阅的方法包括:a、获取目标程序集;b、初始化目标程序集实例;c、初始化程序集实例的目标类实体;d、提取程序集目标类实体中的方法;e、将所述方法绑定到订阅器相应的事件上。
[0008]进一步,所述中间件还包括抽象基类模块,该模块用于提供所有订阅器的公共属性及方法,并作为所有订阅器的基类,也是消息转发引擎用来查找/保存订阅器的类型。
[0009]进一步,所述中间件还包括一中间件基础事件实现接口,中间件接口定义模块定义的接口必须继承中间件基础事件实现接口,以供绑定订阅者时需要根据中间件基础事件实现接口来判断接口是否合法。
[0010]本发明的有益效果是:
本发明基于事件和订阅模式而开发的项目间相互调用的中间件,此中间件包含消息转发引擎、中间件接口定义模块、中间件接口实现模块、订阅器,消息转发引擎在程序初始化时加载所有实现(订阅)了中间件接口的模块,采用事件机制封装其接口的定义和实现两部分,最后将接口暴露出来。项目间调用时只需要知道接口即可,消息转发引擎自动将接口的呼叫转发到相应的接口实现中。一份接口支持任意多个实现,这样可以实现事件的多订阅,可应用于在源项目中修改数据时,触发一次数据修改的事件,即可同时呼叫多个不同项目的数据同步修改逻辑,而这些实现逻辑对于源项目是封闭的。该中间件可以使项目解耦,同时又可以项目相互调用,提高了开发的效率;基于接口的开发可以封装实现,提供良好的调用接口,可以提高项目的独立性和可维护性。
【附图说明】
[0011]下面结合附图对本发明的【具体实施方式】做进一步的说明。
[0012]图1是传统项目之间的调用关系图;
图2是本发明项目之间的调用关系图;
图3是本发明的中间件示意图;
图4是本发明的订阅器事件绑定流程图。
【具体实施方式】
[0013]参考图2所示,为本发明的一种基于订阅模式的中间件调用系统,包括:
一源项目BLL,用于接收用户的Web请求以调用相应的目标项目;
一中间件,该中间件用于提供项目之间调用的接口 ;
两个目标项目Stu、Sync,该目标项目经中间件所提供的接口供源项目BLL调用其所包含的类的方法数据。
[0014]其存在关系为:
A、Stu项目引用BLL项目,即在编译时直接依赖于项目BLL;
B、Sync项目引用BLL项目,即在编译时直接依赖于项目BLL;
C、BLL项目引用中间件项目,即在编译时直接依赖于项目中间件;
D、Stu项目引用中间件项目,即在编译时直接依赖于中间件项目;
E、Sync项目引用中间件项目,即在编译时直接依赖于中间件项目;
F、中间件在运行时调用Sync项目的接口/方法,如果找不到接口定义,则忽略;
G、中间件在运行时调用Stu项目的接口/方法,如果找不到接口定义,则忽略。
[0015]如图3所示,所述中间件包括消息转发引擎、订阅器、中间件接口定义模块以及中间件接口实现模块,该消息转发引擎用于传输源项目与目标项目之间的数据,中间件接口定义模块用于定位所述接口所在的目标项目,中间件接口实现模块用于定位目标项目中实现所述接口的类;订阅器利用提供中间件接口定义模块和中间件接口实现模块提供的属性订阅目标项目中实现所述接口的类的方法,并由消息转发引擎反馈所述方法的数据至源项目。
[0016]具体的,首先需要实现消息转发引擎Subscript1nManager并作为所有订阅器的唯一入口。通过接口类名即可找到对应的订阅器实例。所有的订阅器(如Authorizat1n)必须实现一个接口和一个抽象基类(Subscript1nBase):
I中间件接口(IAuthorizat1n)。该接口必须继承接口 IEvent,绑定订阅者时需要根据IEvent来判断接口是否合法。
[0017]I抽象基类(Subscript1nBase)中提供所有订阅器的公共属性及方法。作为所有订阅器的基类,也是Subscript1nManager用来查找/保存订阅器的类型。
[0018]订阅器中必须提供所有需要项目实现的事件委托及其目标方法。项目(Sync)中所有实现了订阅器中的目标方法的类,都必须声明为SubscriberAttribute (订阅器属性),而且参数必须是相应的接口(IAuthorizat1n)。消息转发引擎Subscript1nManager中定义了方法void RegisterSubscribers O ,用于在系统初始化时加载所有子项目中声明了SubscriberAttribute的类,并绑定实现方法到事件的目标方法中。绑定时需要根据所声明的接口(IAuthorizat1n)来寻找所有事件的目标方法。
[0019]基础项目(BLL)只需要通过调用事件接口(IAuthorizat1n)的方法即可实现事件发布:
Middleware.Subscript1nManager.Current.Get<IAuthorizat1n> 0.Login ()
项目(Sync)中实现了接口的类,需要声明为:SubscriberAttribute,并且提供需要实现的接口
[Middleware.Subscriber(typeof(Middleware.1Authorizat1n))]public class Authorizat1n{...};
从而可以扩展中间件使支持同一个接口的不同实现,这就实现了多订阅。
[0020][Middleware.Subscriber (typeof (Middleware.1Authorizat1n)) ] publicclass OpenAuthorizat1n {...}
当BLL项目调用了以下的方法,那么系统会依次呼叫Authorizat1n和OpenAuthorizat1n 的方法。如:
Middleware.Subscript1nManager.Current.Get<IAuthorizat1n> 0.Login ()
如图4所示,订阅器是一个完全独立的项目,不依赖于任何项目,要使之能够执行子项目的相应目标方法,需要在系统初始化的时候将子项目的目标方法绑定到订阅器的相应事件上,随后即可调用同一的入口调用相应接口的方法。
[0021]订阅器实现所述订阅的方法包括:a、获取目标程序集;b、初始化目标程序集实例;c、初始化程序集实例的目标类实体;d、提取程序集目标类实体中的方法;e、将所述方法绑定到订阅器相应的事件上。
[0022]以上所述仅为本发明的优先实施方式,本发明并不限定于上述实施方式,只要以基本相同手段实现本发明目的的技术方案都属于本发明的保护范围之内。
【主权项】
1.一种基于订阅模式的中间件调用系统,其特征在于包括: 至少一源项目,用于接收用户的Web请求以调用相应的目标项目; 一中间件,该中间件用于提供项目之间调用的接口 ; 至少一目标项目,该目标项目经中间件所提供的接口供源项目调用其所包含的类的方法数据。
2.根据权利要求1所述的一种基于订阅模式的中间件调用系统,其特征在于:所述中间件包括消息转发引擎、订阅器、中间件接口定义模块以及中间件接口实现模块,该消息转发引擎用于传输源项目与目标项目之间的数据,中间件接口定义模块用于定位所述接口所在的目标项目,中间件接口实现模块用于定位目标项目中实现所述接口的类;订阅器利用提供中间件接口定义模块和中间件接口实现模块提供的属性订阅目标项目中实现所述接口的类的方法,并由消息转发引擎反馈所述方法的数据至源项目。
3.根据权利要求2所述的一种基于订阅模式的中间件调用系统,其特征在于:所述订阅器实现所述订阅的方法包括:a、获取目标程序集;b、初始化目标程序集实例;c、初始化程序集实例的目标类实体;d、提取程序集目标类实体中的方法;e、将所述方法绑定到订阅器相应的事件上。
4.根据权利要求2所述的一种基于订阅模式的中间件调用系统,其特征在于:所述中间件还包括抽象基类模块,该模块用于提供所有订阅器的公共属性及方法,并作为所有订阅器的基类,也是消息转发引擎用来查找/保存订阅器的类型。
5.根据权利要求2所述的一种基于订阅模式的中间件调用系统,其特征在于:所述中间件还包括一中间件基础事件实现接口,中间件接口定义模块定义的接口必须继承中间件基础事件实现接口,以供绑定订阅者时需要根据中间件基础事件实现接口来判断接口是否合法。
【专利摘要】本发明公开了一种基于订阅模式的中间件调用系统,包括:至少一源项目,用于接收用户的Web请求以调用相应的目标项目;一中间件,该中间件用于提供项目之间调用的接口;至少一目标项目,该目标项目经中间件所提供的接口供源项目调用其所包含的类的方法数据。发明可以解决项目间相互调用的问题以及通过多订阅实现消息广播的机制。
【IPC分类】G06F9-44
【公开号】CN104572116
【申请号】CN201510036743
【发明人】余敬龙
【申请人】广东能龙教育股份有限公司
【公开日】2015年4月29日
【申请日】2015年1月23日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1