CN104572116A - 一种基于订阅模式的中间件调用*** - Google Patents

一种基于订阅模式的中间件调用*** Download PDF

Info

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
Application number
CN201510036743.9A
Other languages
English (en)
Inventor
余敬龙
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
GUANGDONG NENGLONG EDUCATION Co Ltd
Original Assignee
GUANGDONG NENGLONG EDUCATION Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by GUANGDONG NENGLONG EDUCATION Co Ltd filed Critical GUANGDONG NENGLONG EDUCATION Co Ltd
Priority to CN201510036743.9A priority Critical patent/CN104572116A/zh
Publication of CN104572116A publication Critical patent/CN104572116A/zh
Pending legal-status Critical Current

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所述的一种基于订阅模式的中间件调用***,其特征在于:所述中间件还包括一中间件基础事件实现接口,中间件接口定义模块定义的接口必须继承中间件基础事件实现接口,以供绑定订阅者时需要根据中间件基础事件实现接口来判断接口是否合法。
CN201510036743.9A 2015-01-23 2015-01-23 一种基于订阅模式的中间件调用*** Pending CN104572116A (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 长沙瑞和数码科技有限公司 一种农业物联网边缘中间件***

Patent Citations (4)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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
US10474559B2 (en) System for distributed software quality improvement
US7017148B2 (en) Apparatus and method for UPnP device code generation using XML
CN104572116A (zh) 一种基于订阅模式的中间件调用***
US20040172618A1 (en) Systems and methods for a common runtime container framework
CN104679572B (zh) 基于预加载机制的插件支持方法
US20070002689A1 (en) System and method of data source detection
JP2007529820A (ja) テーブル値関数を呼び出すクエリの効率的な評価を行うためのシステムおよび方法
WO2014138895A1 (en) Systems and methods for partitioning computing applications to optimize deployment resources
CN103218220A (zh) 基于动态可插拔组件的物联网中间件***
CN104778175A (zh) 一种实现异构数据库数据同步的方法及***
US8682954B2 (en) Replication in a network environment
CN104133717A (zh) 一种用于数据开放***的服务自动化生成和部署方法
CN105471968A (zh) 一种数据交换方法、***以及数据平台服务器
Oliveira et al. Component framework infrastructure for virtual environments
US20110041138A1 (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
CN105354081A (zh) 同步绑定服务的方法及装置
CN102520971A (zh) 基于cad软件的数据交互方法及装置
CN104185249A (zh) 基于安卓***的局域网设备发现方法及动态链接库
CN112685379A (zh) 数据组织方式、***和设备以及存储介质
CN117555533B (zh) 代码生成方法、电子设备及存储介质
CN113704320B (zh) 数据处理方法、装置、电子设备及存储介质
CN103297479A (zh) 一种插件升级的分布式检测方法及装置
CN112988170B (zh) 应用显示的方法及装置
Εμμανουήλ IoT platform and data management using microservices

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