CN104572116A - 一种基于订阅模式的中间件调用系统 - Google Patents
一种基于订阅模式的中间件调用系统 Download PDFInfo
- Publication number
- CN104572116A CN104572116A CN201510036743.9A CN201510036743A CN104572116A CN 104572116 A CN104572116 A CN 104572116A CN 201510036743 A CN201510036743 A CN 201510036743A CN 104572116 A CN104572116 A CN 104572116A
- Authority
- CN
- China
- Prior art keywords
- middleware
- interface
- project
- module
- class
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于订阅模式的中间件调用系统,包括:至少一源项目,用于接收用户的Web请求以调用相应的目标项目;一中间件,该中间件用于提供项目之间调用的接口;至少一目标项目,该目标项目经中间件所提供的接口供源项目调用其所包含的类的方法数据。发明可以解决项目间相互调用的问题以及通过多订阅实现消息广播的机制。
Description
技术领域
本发明属于互联网技术领域,具体涉及一种基于订阅模式的中间件调用系统。
背景技术
针对项目开发中涉及相互调用的多个项目,为保证编译、运行时均能够正常无误的运行,需要引入一套可以提供不同项目之间相互调用的机制。这套机制需要支持一对多、多对多的调用方法。一对多是指暴露一套可以提供给任意项目调用的接口,这些项目无需知道接口的实现逻辑。多对多也是暴露一套接口,但是与一对多不同的是,这套接口可以执行不同的实现,这些实现由相应的订阅者执行。
该中间件主要针对以下的设计模式而做改良,在asp.net开发中,如图1所示:(其中,BLL项目为需要调用的源项目,Stu项目和Sync项目为被调用项目)
A.Stu项目引用BLL项目,即在编译时直接依赖于项目BLL;
B.Sync项目引用BLL项目,即在编译时直接依赖于项目BLL;
C.BLL项目引用Stu的类库,即在编译时间接依赖于项目BLL;
D.BLL项目引用Sync的类库,即在编译时间接依赖于项目BLL;
这种项目中的相互调用设计的后果是,任意一个项目编译失败后,容易导致全部项目都无法重新编译,因为某项目编译时会删除相应的类库文件,成功后会生成新的类库文件,也就是说失败后就缺少类库文件了,而缺少类库文件,BLL项目就无法编译。
发明内容
为了克服上述技术问题, 本发明的目的在于提供一种基于订阅模式的中间件调用系统。
本发明采用的技术方案是:
一种基于订阅模式的中间件调用系统,包括:
至少一源项目,用于接收用户的Web请求以调用相应的目标项目;
一中间件,该中间件用于提供项目之间调用的接口;
至少一目标项目,该目标项目经中间件所提供的接口供源项目调用其所包含的类的方法数据。
进一步,所述中间件包括消息转发引擎、订阅器、中间件接口定义模块以及中间件接口实现模块,该消息转发引擎用于传输源项目与目标项目之间的数据,中间件接口定义模块用于定位所述接口所在的目标项目,中间件接口实现模块用于定位目标项目中实现所述接口的类;订阅器利用提供中间件接口定义模块和中间件接口实现模块提供的属性订阅目标项目中实现所述接口的类的方法,并由消息转发引擎反馈所述方法的数据至源项目。
进一步,所述订阅器实现所述订阅的方法包括:a、获取目标程序集;b、初始化目标程序集实例;c、初始化程序集实例的目标类实体;d、提取程序集目标类实体中的方法;e、将所述方法绑定到订阅器相应的事件上。
进一步,所述中间件还包括抽象基类模块,该模块用于提供所有订阅器的公共属性及方法,并作为所有订阅器的基类,也是消息转发引擎用来查找/保存订阅器的类型。
进一步,所述中间件还包括一中间件基础事件实现接口,中间件接口定义模块定义的接口必须继承中间件基础事件实现接口,以供绑定订阅者时需要根据中间件基础事件实现接口来判断接口是否合法。
本发明的有益效果是:
本发明基于事件和订阅模式而开发的项目间相互调用的中间件,此中间件包含消息转发引擎、中间件接口定义模块、中间件接口实现模块、订阅器,消息转发引擎在程序初始化时加载所有实现(订阅)了中间件接口的模块,采用事件机制封装其接口的定义和实现两部分,最后将接口暴露出来。项目间调用时只需要知道接口即可,消息转发引擎自动将接口的呼叫转发到相应的接口实现中。一份接口支持任意多个实现,这样可以实现事件的多订阅,可应用于在源项目中修改数据时,触发一次数据修改的事件,即可同时呼叫多个不同项目的数据同步修改逻辑,而这些实现逻辑对于源项目是封闭的。该中间件可以使项目解耦,同时又可以项目相互调用,提高了开发的效率;基于接口的开发可以封装实现,提供良好的调用接口,可以提高项目的独立性和可维护性。
附图说明
下面结合附图对本发明的具体实施方式做进一步的说明。
图1是传统项目之间的调用关系图;
图2是本发明项目之间的调用关系图;
图3是本发明的中间件示意图;
图4是本发明的订阅器事件绑定流程图。
具体实施方式
参考图2所示,为本发明的一种基于订阅模式的中间件调用系统,包括:
一源项目BLL,用于接收用户的Web请求以调用相应的目标项目;
一中间件,该中间件用于提供项目之间调用的接口;
两个目标项目Stu、Sync,该目标项目经中间件所提供的接口供源项目BLL调用其所包含的类的方法数据。
其存在关系为:
A、Stu项目引用BLL项目,即在编译时直接依赖于项目BLL;
B、Sync项目引用BLL项目,即在编译时直接依赖于项目BLL;
C、BLL项目引用中间件项目,即在编译时直接依赖于项目中间件;
D、Stu项目引用中间件项目,即在编译时直接依赖于中间件项目;
E、Sync项目引用中间件项目,即在编译时直接依赖于中间件项目;
F、中间件在运行时调用Sync项目的接口/方法,如果找不到接口定义,则忽略;
G、中间件在运行时调用Stu项目的接口/方法,如果找不到接口定义,则忽略。
如图3所示,所述中间件包括消息转发引擎、订阅器、中间件接口定义模块以及中间件接口实现模块,该消息转发引擎用于传输源项目与目标项目之间的数据,中间件接口定义模块用于定位所述接口所在的目标项目,中间件接口实现模块用于定位目标项目中实现所述接口的类;订阅器利用提供中间件接口定义模块和中间件接口实现模块提供的属性订阅目标项目中实现所述接口的类的方法,并由消息转发引擎反馈所述方法的数据至源项目。
具体的,首先需要实现消息转发引擎SubscriptionManager并作为所有订阅器的唯一入口。通过接口类名即可找到对应的订阅器实例。所有的订阅器(如Authorization)必须实现一个接口和一个抽象基类(SubscriptionBase):
l 中间件接口(IAuthorization)。该接口必须继承接口IEvent,绑定订阅者时需要根据IEvent来判断接口是否合法。
l
抽象基类(SubscriptionBase)中提供所有订阅器的公共属性及方法。作为所有订阅器的基类,也是SubscriptionManager用来查找/保存订阅器的类型。
订阅器中必须提供所有需要项目实现的事件委托及其目标方法。项目(Sync)中所有实现了订阅器中的目标方法的类,都必须声明为SubscriberAttribute(订阅器属性),而且参数必须是相应的接口(IAuthorization)。消息转发引擎SubscriptionManager中定义了方法void RegisterSubscribers (),用于在系统初始化时加载所有子项目中声明了SubscriberAttribute的类,并绑定实现方法到事件的目标方法中。绑定时需要根据所声明的接口(IAuthorization)来寻找所有事件的目标方法。
基础项目(BLL)只需要通过调用事件接口(IAuthorization)的方法即可实现事件发布:
Middleware.SubscriptionManager.Current.Get<IAuthorization>().Login()
项目(Sync)中实现了接口的类,需要声明为:SubscriberAttribute,并且提供需要实现的接口
[Middleware.Subscriber(typeof(Middleware.IAuthorization))]
public class
Authorization{ ...};
从而可以扩展中间件使支持同一个接口的不同实现,这就实现了多订阅。
[Middleware.Subscriber(typeof(Middleware.IAuthorization))]public
class OpenAuthorization{ ...}
当BLL项目调用了以下的方法,那么系统会依次呼叫Authorization和OpenAuthorization 的方法。如:
Middleware.SubscriptionManager.Current.Get<IAuthorization>().Login()
如图4所示,订阅器是一个完全独立的项目,不依赖于任何项目,要使之能够执行子项目的相应目标方法,需要在系统初始化的时候将子项目的目标方法绑定到订阅器的相应事件上,随后即可调用同一的入口调用相应接口的方法。
订阅器实现所述订阅的方法包括:a、获取目标程序集;b、初始化目标程序集实例;c、初始化程序集实例的目标类实体;d、提取程序集目标类实体中的方法;e、将所述方法绑定到订阅器相应的事件上。
以上所述仅为本发明的优先实施方式,本发明并不限定于上述实施方式,只要以基本相同手段实现本发明目的的技术方案都属于本发明的保护范围之内。
Claims (5)
1. 一种基于订阅模式的中间件调用系统,其特征在于包括:
至少一源项目,用于接收用户的Web请求以调用相应的目标项目;
一中间件,该中间件用于提供项目之间调用的接口;
至少一目标项目,该目标项目经中间件所提供的接口供源项目调用其所包含的类的方法数据。
2.根据权利要求1所述的一种基于订阅模式的中间件调用系统,其特征在于:所述中间件包括消息转发引擎、订阅器、中间件接口定义模块以及中间件接口实现模块,该消息转发引擎用于传输源项目与目标项目之间的数据,中间件接口定义模块用于定位所述接口所在的目标项目,中间件接口实现模块用于定位目标项目中实现所述接口的类;订阅器利用提供中间件接口定义模块和中间件接口实现模块提供的属性订阅目标项目中实现所述接口的类的方法,并由消息转发引擎反馈所述方法的数据至源项目。
3.根据权利要求2所述的一种基于订阅模式的中间件调用系统,其特征在于:所述订阅器实现所述订阅的方法包括:a、获取目标程序集;b、初始化目标程序集实例;c、初始化程序集实例的目标类实体;d、提取程序集目标类实体中的方法;e、将所述方法绑定到订阅器相应的事件上。
4.根据权利要求2所述的一种基于订阅模式的中间件调用系统,其特征在于:所述中间件还包括抽象基类模块,该模块用于提供所有订阅器的公共属性及方法,并作为所有订阅器的基类,也是消息转发引擎用来查找/保存订阅器的类型。
5.根据权利要求2所述的一种基于订阅模式的中间件调用系统,其特征在于:所述中间件还包括一中间件基础事件实现接口,中间件接口定义模块定义的接口必须继承中间件基础事件实现接口,以供绑定订阅者时需要根据中间件基础事件实现接口来判断接口是否合法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510036743.9A CN104572116A (zh) | 2015-01-23 | 2015-01-23 | 一种基于订阅模式的中间件调用系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510036743.9A CN104572116A (zh) | 2015-01-23 | 2015-01-23 | 一种基于订阅模式的中间件调用系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104572116A true CN104572116A (zh) | 2015-04-29 |
Family
ID=53088282
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510036743.9A Pending CN104572116A (zh) | 2015-01-23 | 2015-01-23 | 一种基于订阅模式的中间件调用系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104572116A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105955833A (zh) * | 2016-06-06 | 2016-09-21 | 腾讯科技(深圳)有限公司 | 引擎调用方法和装置 |
CN108255545A (zh) * | 2016-12-28 | 2018-07-06 | 阿里巴巴集团控股有限公司 | 组件间的功能调用方法、装置及组件化架构系统 |
CN109547334A (zh) * | 2018-12-26 | 2019-03-29 | 苏州宏软信息技术有限公司 | 一种用于机联网消息通信的服务系统及其实施方法 |
CN112835654A (zh) * | 2021-02-08 | 2021-05-25 | 珠海格力智能装备有限公司 | 动态链接库中的函数的调用方法、装置和处理器 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060123392A1 (en) * | 2004-10-27 | 2006-06-08 | Michael Demuth | Method for generating a transport track through a software system landscape and computer system with a software system landscape and a transport track |
CN101078995A (zh) * | 2007-06-08 | 2007-11-28 | 北京大学 | 构件运行支撑平台接入消息服务的方法 |
CN103530097A (zh) * | 2012-07-04 | 2014-01-22 | 深圳中兴网信科技有限公司 | 一种跨中间件平台的组件的实现方法和装置 |
CN103997532A (zh) * | 2014-05-30 | 2014-08-20 | 长沙瑞和数码科技有限公司 | 一种农业物联网边缘中间件系统 |
-
2015
- 2015-01-23 CN CN201510036743.9A patent/CN104572116A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060123392A1 (en) * | 2004-10-27 | 2006-06-08 | Michael Demuth | Method for generating a transport track through a software system landscape and computer system with a software system landscape and a transport track |
CN101078995A (zh) * | 2007-06-08 | 2007-11-28 | 北京大学 | 构件运行支撑平台接入消息服务的方法 |
CN103530097A (zh) * | 2012-07-04 | 2014-01-22 | 深圳中兴网信科技有限公司 | 一种跨中间件平台的组件的实现方法和装置 |
CN103997532A (zh) * | 2014-05-30 | 2014-08-20 | 长沙瑞和数码科技有限公司 | 一种农业物联网边缘中间件系统 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105955833A (zh) * | 2016-06-06 | 2016-09-21 | 腾讯科技(深圳)有限公司 | 引擎调用方法和装置 |
CN108255545A (zh) * | 2016-12-28 | 2018-07-06 | 阿里巴巴集团控股有限公司 | 组件间的功能调用方法、装置及组件化架构系统 |
CN109547334A (zh) * | 2018-12-26 | 2019-03-29 | 苏州宏软信息技术有限公司 | 一种用于机联网消息通信的服务系统及其实施方法 |
CN109547334B (zh) * | 2018-12-26 | 2021-10-08 | 苏州宏软信息技术有限公司 | 一种用于机联网消息通信的服务系统及其实施方法 |
CN112835654A (zh) * | 2021-02-08 | 2021-05-25 | 珠海格力智能装备有限公司 | 动态链接库中的函数的调用方法、装置和处理器 |
CN112835654B (zh) * | 2021-02-08 | 2024-02-27 | 珠海格力智能装备有限公司 | 动态链接库中的函数的调用方法、装置和处理器 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20180196731A1 (en) | System for distributed software quality improvement | |
US8661154B2 (en) | Managing objects using a client-server bridge | |
CN104572116A (zh) | 一种基于订阅模式的中间件调用系统 | |
US20030093769A1 (en) | Apparatus and method for UPnP device code generation using XML | |
US20040172618A1 (en) | Systems and methods for a common runtime container framework | |
US20070002689A1 (en) | System and method of data source detection | |
JP2007529820A (ja) | テーブル値関数を呼び出すクエリの効率的な評価を行うためのシステムおよび方法 | |
CN103218220A (zh) | 基于动态可插拔组件的物联网中间件系统 | |
WO2014138895A1 (en) | Systems and methods for partitioning computing applications to optimize deployment resources | |
CN104778175A (zh) | 一种实现异构数据库数据同步的方法及系统 | |
US8682954B2 (en) | Replication in a network environment | |
CN104133717A (zh) | 一种用于数据开放系统的服务自动化生成和部署方法 | |
CN110764752A (zh) | 基于微服务架构实现Restful服务图形化服务编排的系统及其方法 | |
US20200371902A1 (en) | Systems and methods for software regression detection | |
US20200293292A1 (en) | System Of Type Inference For Tuple Graph Programs Method Of Executing A Tuple Graph Program Across A Network | |
Oliveira et al. | Component framework infrastructure for virtual environments | |
US8391845B2 (en) | System and method of presenting entities of standard applications in wireless devices | |
Plebani et al. | MicroMAIS: executing and orchestrating Web services on constrained mobile devices | |
CN102520971A (zh) | 基于cad软件的数据交互方法及装置 | |
CN104185249A (zh) | 基于安卓系统的局域网设备发现方法及动态链接库 | |
CN112685379A (zh) | 数据组织方式、系统和设备以及存储介质 | |
CN113704320B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN103297479A (zh) | 一种插件升级的分布式检测方法及装置 | |
Brogi et al. | Workflow semantics of peer and service behaviour | |
Jahed | Automatic Distribution and Cloud-Native Deployment of Executable Component and Connector Model |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20150429 |
|
RJ01 | Rejection of invention patent application after publication |