CN109240758A - 一种支持插件接口同步异步统一调用的方法及微内核架构 - Google Patents
一种支持插件接口同步异步统一调用的方法及微内核架构 Download PDFInfo
- Publication number
- CN109240758A CN109240758A CN201810829640.1A CN201810829640A CN109240758A CN 109240758 A CN109240758 A CN 109240758A CN 201810829640 A CN201810829640 A CN 201810829640A CN 109240758 A CN109240758 A CN 109240758A
- Authority
- CN
- China
- Prior art keywords
- card
- plug
- unit
- interface
- call
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种支持插件接口同步异步统一调用的方法及微内核架构,该架构包括应用定位表、消息队列、线程池和映射结构表;应用定位表用于存储使用同一微内核架构的多个应用程序的定位信息;映射结构表用于对应存储一个应用程序中的插件名、插件接口名、插件接口地址之间的映射关系;消息队列按序存储插件接收的远程调用请求;线程池中的每个线程对应绑定一个插件以拉取该插件接收的远程调用请求,提取插件名并根据映射结构表查找插件名对应的插件接口地址,匹配并进行接口调用;本发明支持应用进程内及进程间的插件接口的同步或异步交互调用,使微内核架构既可作为单一应用的软件架构,也可以扩展为分布式应用的软件架构,提升了微内核架构的延展性。
Description
技术领域
本发明属于软件架构及应用程序插件技术领域,更具体地,涉及一种支持插件接口同步异步统一调用的方法及微内核架构。
背景技术
微内核架构有时也被成为插件架构模式(plug-in architecture pattern),见图1,其是一种通用的软件架构模式,与所使用的软件开发语言没有强制关联关系。微内核架构包含两部分组件:核心系统(core system)和插件模块(plug-in modules)。应用逻辑被分割为独立的插件模块和核心系统,提供了可扩展性、灵活性、功能隔离和自定义处理逻辑的特性。微内核架构的使用范围很广泛,比较著名的插件架构产品为Eclipse和Firefox。
插件模块连接核心系统的方法可以有很多种,包含OSGi(开放服务网关协议)、消息队列、网络服务、甚至是直接的点对点绑定(对象实例化)。选用的连接方式取决于设计的应用程序类型(小产品或大型企业产品)和一些特定需求(如单一部署或分布式部署)。架构模式本身不指定任何一种实施方式,只要求插件模块必须保持相互独立。插件模块连接核心系统的方式在一定程度上决定了插件接口被交互调用的方式,如图2所示,不同插件内接口的交互场景可能包括在同一应用进程内或不同应用进程间两种情况,且接口调用方式应至少具备同步、异步两种调用形式;
但是现行一些已实现的微内核架构通常对以上场景的支持并不完全,例如CPPMicroservice,将插件实现的类型或接口注册为服务的形式,只支持同一应用进程内插件接口的交互调用,且在使用过程中只能以同步方式构造插件对象并使用其接口,导致无法实现使用该微内核架构的应用与其它应用之间的互操作,不利于提升微内核架构的应用扩展性。
发明内容
针对现有技术的至少一个缺陷或改进需求,本发明提供了一种支持插件接口同步异步统一调用的方法及微内核架构,其目的在于解决现有的微内核架构系统无法完全支持在应用进程内和应用进程间的同步、异步调用插件接口的问题。
为实现上述目的,按照本发明的一个方面,提供了一种支持插件接口同步异步统一调用的方法,包括以下步骤:
S1:应用程序中的微内核架构创建该应用的应用定位表,用于存储使用同一框架的其它应用程序的定位信息,该定位信息包括应用名及其对应的网络位置信息;并创建对应的映射结构表以存储该应用中的插件名、插件接口名和插件接口地址的映射关系;
S2:通过所述应用定位表查找待调用的应用程序是本地应用或外部应用;所述应用定位表中存储有使用同一微内核架构的多个应用程序的定位信息;若是本地应用,则进入步骤S3;若是外部应用,则进入步骤S6;
S3:根据不同的调用接口区分本次调用为本地应用内的同步调用或异步调用,所述调用接口包括同步调用接口和异步调用接口;若是同步调用,则进入步骤S4;若是异步调用,进入步骤S5;
S4:通过本地应用的映射结构表查找待调用的插件接口地址并直接进行接口调用;
S5:构造远程调用消息并插入到待调用插件的消息队列中;待调用插件通过本地应用的映射结构表查找待调用的插件接口地址并进行接口调用;
S6:构造远程调用消息并发送到外部应用,外部应用通过其对应的映射结构表查找待调用的插件接口地址并进行接口调用;若为同步调用,则本地应用同步等待外部应用对接口调用结果的回复消息。
优选的,上述支持插件接口同步异步统一调用的方法,其步骤S1中,所述映射结构表的创建过程包括以下子步骤:
S11:框架加载插件的初始化接口并注册插件内的所有插件接口;
S12:以插件为单位创建插件接口表,枚举插件内所有的插件接口并分别为所述插件接口生成插件接口名、接口ID和接口地址;
S13:将插件名与插件接口表地址绑定以建立两者的对应关系,生成插件接口表地址表。
优选的,上述支持插件接口同步异步统一调用的方法,其步骤S4具体包括:在插件接口表地址表中查找待调用的插件名对应的插件接口表地址;根据所述插件接口表地址访问对应的插件接口表,匹配插件接口地址并直接进行接口调用。
优选的,上述支持插件接口同步异步统一调用的方法,其步骤S2之前还包括以下步骤:
框架分别为各插件创建消息队列以按序存储插件接收的远程调用请求,并分别将插件接收的远程调用请求的处理任务附加到插件的绑定线程。
优选的,上述支持插件接口同步异步统一调用的方法,其步骤S5中接口调用的过程包括以下步骤:
S51:待调用插件的绑定线程访问其消息队列以获取远程调用消息;
S52:从所述远程调用消息中提取出待调用的插件名,根据所述插件名在插件接口表地址表中查找对应的插件接口表地址;
S53:根据所述插件接口表地址访问插件接口表,传递接口参数并直接进行接口调用。
优选的,上述支持插件接口同步异步统一调用的方法,其步骤S6中接口调用的过程包括以下步骤:
S61:外部应用接收远程调用消息并将其插入到待调用插件的消息队列中;
S62:待调用插件的绑定线程访问其消息队列以获取远程调用消息;
S63:从远程调用消息中提取出待调用的插件名,根据所述插件名在插件接口表地址表中查找对应的插件接口表地址;
S64:根据所述插件接口表地址访问插件接口表,传递接口参数并直接进行接口调用。
优选的,上述支持插件接口同步异步统一调用的方法,其远程调用消息包括消息ID、目的应用名、目的插件名、接口名、接口参数、源端应用名、源端插件名和请求标识。
优选的,上述支持插件接口同步异步统一调用的方法,其步骤S6中同步调用过程具体包括:外部应用根据所述请求标识构造接口调用结果的回复消息;本地应用不断拉取进入其消息队列中的回复消息并检查该回复消息是否与发送的请求标识相匹配。
按照本发明的另一个方面,提供了一种支持插件接口同步异步统一调用的微内核架构,包括核心系统和多个插件,还包括应用定位表、消息队列、线程池和映射结构表;
所述应用定位表用于存储与某一应用程序使用同一微内核架构的其它应用程序的定位信息以路由同一应用进程内及不同应用进程间的插件接口的交互调用,所述定位信息包括应用名及其对应的网络位置信息;
所述映射结构表用于对应存储一个应用程序中的插件名、插件接口名、插件接口地址之间的映射关系;
所述消息队列用于对应存储一个插件接收的远程调用请求;
所述线程池包括多个线程,每个所述线程对应绑定一个插件以从所述插件对应的消息队列中拉取远程调用请求,并从所述远程调用消息中提取出待调用的插件名,根据所述映射结构表查找待调用的插件接口地址,匹配后直接进行接口调用,实现同一应用进程内的插件接口的异步调用,以及应用进程间的插件接口的同步或异步调用。
优选的,上述支持插件接口同步异步统一调用的微内核架构,其映射结构表包括插件接口表地址表,以及与所述插件的数量一致的插件接口表;
所述插件接口表用于对应存储一个插件在核心系统中注册的多个插件接口的接口名、ID和接口地址;
所述插件接口表地址表用于存储多个插件的插件名及其对应的插件接口表地址的对应关系。
优选的,上述支持插件接口同步异步统一调用的微内核架构系统,其消息队列的数据结构包括但不限于数组、单向链表或双向链表。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
(1)本发明提供的支持插件接口同步异步统一调用的方法及微内核架构,通过应用定位表、映射结构表、消息队列和线程池实现了进程内、进程间插件接口的同步或异步调用,其中,根据在框架内部构造的应用定位表确定一次调用是调用同一个应用进程内部插件的接口还是调用外部应用进程的插件接口;通过映射结构表可直接查找待调用插件接口的地址,简化了插件接口交互调用过程中的复杂调用关系,实现方式简单、操作性强,且使得微内核架构既可以作为单一应用的软件架构,也可以扩展作为分布式应用的软件架构,提升了微内核架构的延展性;且使得开发单一应用软件和分布式应用软件时,对插件接口的调用具有统一的范式,可有效降低开发人员对于场景理解的要求。
(2)本发明提供的支持插件接口同步异步统一调用的方法及微内核架构,线程池的使用可避免线程的频繁创建及销毁,在有大量插件的环境下减少对系统性能的负面影响,提高了系统运行效率;通过为插件自动创建消息队列及消息处理线程以提供应用进程间底层的插件接口的交互调用,将插件开发人员从调用关系的复杂场景下剥离出来,聚焦于插件的业务功能接口设计,减小了开发人员的代码开发量,提高工作效率。
附图说明
图1是本发明实施例提供的微内核架构的结构示意图;
图2是本发明实施例提供的插件接口交互调用形式的示意图;
图3是本发明实施例提供的单向链表式消息队列的结构示意图;
图4是本发明实施例提供的支持插件接口同步异步统一调用的方法的流程图;
图5是本发明实施例提供的插件接口加载及注册的流程图;
图6是本发明实施例提供的应用进程内插件接口同步调用方法的流程图;
图7是本发明实施例提供的应用进程内插件接口异步调用方法的流程图;
图8是本发明实施例提供的应用进程间插件接口同步调用方法的流程图;
图9是本发明实施例提供的应用进程间插件接口异步调用方法的流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
本发明所提供的一种支持插件接口同步异步统一调用的微内核架构系统,包括核心系统、插件、应用定位表、线程池、消息队列、插件接口表地址表,以及与插件数量一致的插件接口表;
应用定位表用于存储使用同一微内核架构的多个应用程序的定位信息,用于路由同一应用进程内及不同应用进程间的插件接口的交互调用,即通过该应用定位表确定一次调用是调用本应用进程内的插件接口还是调用外部应用进程的插件接口;本实施例提供的应用定位表的形式如表1所示,定位信息包括应用名及其对应的IP地址和端口;为了支持基于同一个微内核架构的多个应用进程之间插件的交互访问(远程访问模式),且考虑到进程可能存在于Windows、Linux或者Mac OS等多种不同的系统平台,多个进程间交互方式通过以太网通信方式实现,以满足跨平台的交互兼容要求。每个应用中的微内核架构为其应用创建一个应用定位表以存储使用同一框架的其它应用程序的定位信息;每个应用持有其他应用的网络位置信息,框架可以广播或者组播形式通过以太网广播或组播自己的位置信息,监听此广播或组播端口的应用将接收到的位置信息插入到应用定位表中,而当应用退出时,同时需要广播或组播一条消息,以便其他应用将其位置信息删除。
表1应用定位表
应用名称 | IP | 端口 |
Application_A | 127.0.0.1 | 8000 |
Application_B | 127.0.0.1 | 8001 |
Application_C | 192.168.10.12 | 8000 |
… | … | … |
微内核架构制定了插件接口的统一的标准形式,此标准由具体实现时自定义,框架本身没有对此标准进行约定,如借助于ASN.1等序列化技术,可以实现接口函数的定义形式一致,因此所有的插件在被框架的核心系统加载过程中有条件以相同的形式注册到框架维护的映射结构表内;该映射结构表由插件接口表地址表和插件接口表构成,其中,插件接口表地址表为一级表,插件接口表为插件接口表地址表下的二级表。
一个插件接口表对应存储一个插件在核心系统中注册的多个插件接口的接口名、ID和接口地址;该插件接口表存储在由核心系统创建的内存表中供后续流程使用,一个插件接口表对应唯一的插件接口表地址;本实施例提供的插件接口表的形式如表2~4所示;插件接口表地址表用于存储插件名及其对应的插件接口表地址的对应关系,其形式如表5所示;每一个使用该微内核架构的应用程序均具有对应的映射结构表,当接收到外部应用或者本应用程序内的插件接口调用请求时,可直接从映射结构表中查找出待调用插件接口的地址。由插件接口表地址表和插件接口表组成的映射结构表是插件接口交互调用的基础;基于表驱动法的匹配编程方法实现的插件接口表地址表和插件接口表支持插件接口信息的直接查询,相比使用逻辑语句(if…else…switch),能够简化查找流程,降低代码复杂度、提高代码可读性、减少代码重复并增强可扩展性,特别是在复杂逻辑的应用场景中具有更大的优势和潜力。
表2插件A的插件接口表
Plugin_A接口名 | ID | 插件接口指针 |
Func1 | *** | Plugin_A::Func1 |
Func2 | *** | Plugin_A::Func2 |
Func3 | *** | Plugin_A::Func3 |
… | … |
表3插件B的插件接口表
Plugin_B接口名 | ID | 插件接口指针 |
Func1 | *** | Plugin_B::Func1 |
Func2 | *** | Plugin_B::Func2 |
Func3 | *** | Plugin_B::Func3 |
… | … |
表4插件C的插件接口表
Plugin_C接口名 | ID | 插件接口指针 |
Func1 | *** | Plugin_C::Func1 |
Func2 | *** | Plugin_C::Func2 |
Func3 | *** | Plugin_C::Func3 |
… | … |
表5插件接口表地址表
插件名 | 插件接口表地址 |
Plugin_A | 0x****** |
Plugin_B | 0x****** |
Plugin_C | 0x****** |
… | … |
消息队列用于对插件接收的远程调用请求以及请求对应的回复消息按照顺序进行排序并缓存,以支持插件接口的远程访问;核心系统在对每个插件的插件接口进行注册的同时为该插件创建一个消息队列,消息队列的形式由消息的定义决定,其实现方式是多种多样的,可以使用数组、单向链表、双向链表等数据结构进行组织,只要满足空间和时间上的性能要求即可;本实施例提供的单向链表式的消息队列的数据结构如图3所示,包括表头和多个按序排列的远程调用请求,如图3所示,远程调用请求包括消息ID、目的应用名、目的插件名、接口名、接口参数、源端应用名、源端插件名和请求标识。
线程池是在一个多线程应用程序的初始化过程中创建的一个包括多个线程的线程集合;线程池中的每个线程都可被分配一个任务,一旦任务完成,线程回到线程池中并等待下一次分配任务;本实施例中,每个线程对应绑定一个插件以提取并执行该插件接收的远程调用请求,在消息队列的基础上,通过为插件附加调度线程方式支持插件接口远程调用消息的分发和处理;在每个插件加载时,框架的核心系统从全局的线程池选取一个空闲线程并与插件绑定,该线程从插件的消息队列中不断拉取远程调用请求,根据远程调用请求所附带的目的插件名、接口名从本地框架的插件接口表匹配对应插件接口进行调用并返回执行结果的任务,以此完成一次插件接口的远程调用;线程池的使用可避免线程的频繁创建及销毁,在有大量插件的环境下减少对系统性能的负面影响,并提供跨进程的底层交互,将插件开发人员从复杂的调用关系场景下剥离出来,聚焦于插件的业务功能接口设计。
图4是本实施例提供的支持插件接口同步异步统一调用的方法的流程图,如图4所示,该方法包括以下步骤:
S1:各应用程序中的框架分别为其应用创建应用定位表以存储使用同一框架的其它应用程序的定位信息,该定位信息包括应用名及其对应的IP地址信息和端口;
S2:框架加载插件并注册各插件内的所有插件接口,并分别为其应用程序创建对应的映射结构表以存储该应用程序中的插件名、插件接口名和插件接口地址的映射关系;
具体包括以下子步骤:
1、核心系统加载插件的初始化接口;
一般将插件内所要注册的接口以表的形式在插件的初始化接口进行描述,并被框架核心系统所使用;核心系统通过加载插件的初始化接口获取该插件内所要注册的插件接口;
2、注册插件接口信息;
以插件为单位创建插件接口表,通过枚举插件内所有待注册的插件接口将插件接口名、插件接口唯一ID、插件接口地址以插件接口表的形式注册到创建的内存表中供后续流程使用;每个插件接口表具有唯一的存储地址;
3、将插件名与插件接口表地址绑定,生成插件接口表地址表;
在全局的插件接口表地址表中插入插件名及其对应的插件接口表地址,建立两者的映射结构表。
S3:框架为所有加载的插件创建消息队列以按序存储插件接收的远程调用请求;
创建插件的接口远程调用消息队列,用于对其他插件对本插件接口的远程调用请求进行排序和缓存,供消息处理线程调度消息使用;
S4:附加插件的远程调用请求处理任务到指定线程;
框架从线程池中选取一个空闲线程,将插件的接口远程调用请求处理任务附加到该线程,用于执行从该插件的消息队列中按序拉取远程调用请求,匹配远程调用请求对应的处理函数并执行以及进行回复。
S5:启动插件远程调用消息处理线程运行;
线程与插件的绑定关系建立完成后,启动线程运行。
S6:通过待调用的应用名在应用定位表中查找待调用的应用程序的网络位置信息,根据该网络位置信息判断待调用的应用程序是本地应用或外部应用;若是本地应用,则进入步骤S7;若是外部应用,则进入步骤S10;
S7:根据使用的插件接口调用接口判断本次调用为同一应用进程内的同步调用或异步调用,若是同步调用,则进入步骤S8;若是异步调用,进入步骤S9;
微内核架构提供了SyncCall接口和AsyncCall接口两种调用接口,分别用于插件接口的同步调用和异步调用;本实施例提供的SyncCall接口和AsyncCall接口的实现形式如下:
返回值类型SyncCall(应用名,插件名,接口名,接口对应参数);
返回值类型AsyncCall(应用名,插件名,接口名,接口对应参数);
S8:待调用的插件直接通过本地应用的映射结构表查找待调用的插件接口地址,匹配插件接口地址并直接进行接口调用;
图6是本实施例提供的应用进程内插件接口同步调用的方法流程图,应用进程内插件接口同步调用使用SyncCall接口,如图6所示,该同步调用方法包括以下步骤:
1、通过SyncCall接口的应用名参数在应用定位表中查找所要调用的应用程序的IP地址信息,根据IP地址信息识别所要调用的应用程序为本地应用;
2、根据SyncCall接口中的插件名在插件接口表地址表中查询该插件名所对应的插件接口表地址;
3、根据插件接口表地址访问插件接口表并匹配接口名对应的接口地址,传递接口对应参数直接进行接口调用。
S9:使用待调用的应用名、插件名、插件接口名和接口参数构造远程调用消息并直接通过框架接口插入到待调用插件的消息队列中;待调用插件通过映射结构表查找对应的插件接口地址,匹配插件接口地址并直接进行接口调用;
图7是本实施例提供的应用进程内插件接口异步调用的方法流程图,应用进程内插件接口异步调用使用AsyncCall接口,如图7所示,接口调用请求端和接口调用回复端分属于同一个应用进程内的两个不同插件,该异步调用方法包括以下步骤:
1、通过AsyncCall接口中的应用名在应用定位表中查找所要调用的应用程序的IP地址信息,根据IP地址信息识别所要调用的应用程序为本地应用;
2、构造远程调用请求并直接通过框架接口将远程调用请求插入到目的插件的消息队列中;该远程调用请求包括消息ID、目的应用名、目的插件名、接口名、接口参数、源端应用名、源端插件名和请求标识;
3、目的插件的绑定线程访问其消息队列以获取远程调用请求;
4、绑定线程从远程调用请求提取消息内容,根据目的插件名在插件接口表地址表中查询对应的插件接口表地址;
5、根据插件接口表地址访问插件接口表,匹配接口名对应的接口地址,传递接口参数直接进行接口调用。
S10:使用待调用的应用名和插件名构造远程调用消息并发送到外部应用;外部应用通过映射结构表查找待调用的插件接口地址,匹配所述插件接口地址并直接进行接口调用;若为同步调用,则外部应用将调用结果反馈至本地应用,本地应用同步等待外部应用的回复消息。
图8是本实施例提供的应用进程间插件接口同步调用的方法流程图,应用进程间插件接口同步调用使用SyncCall接口,如图8所示,接口调用请求端和接口调用回复端分属于两个不同的应用进程,该同步调用方法包括以下步骤:
1、通过SyncCall接口中的应用名在应用定位表中查找所要调用的应用程序的IP地址信息,根据IP地址信息识别所要调用的应用程序为外部应用;
2、构造远程调用请求并通过以太网通信发送至外部应用;该远程调用请求包括消息ID、目的应用名、目的插件名、接口名、接口参数、源端应用名、源端插件名和请求标识;
3、外部应用通过以太网接收远程调用请求并将其插入到目的插件对应的消息队列中;
4、目的插件的绑定线程访问消息队列以获取远程调用请求;
5、绑定线程从远程调用请求提取消息内容,根据目的插件名在插件接口表地址表中查询对应的插件接口表地址;
6、根据插件接口表地址访问插件接口表,匹配接口名对应的接口地址,传递接口参数直接进行接口调用;
7、通过请求标识构造接口调用结果的回复消息并通过以太网反馈至本地应用;
8、本地应用不断尝试拉取消息队列中的消息并匹配是否接受到回复消息,或等待超时。
图9是本实施例提供的应用进程间插件接口异步调用的方法流程图,应用进程间插件接口异步调用使用AsyncCall接口,如图9所示,接口调用请求端和接口调用回复端分属于两个不同的应用进程,该异步调用方法包括以下步骤:
1、通过AsyncCall接口中的应用名在应用定位表中查找所要调用的应用程序的IP地址信息,根据IP地址信息识别所要调用的应用程序为外部应用;
2、构造远程调用请求并通过以太网通信发送至外部应用;该远程调用请求包括消息ID、目的应用名、目的插件名、接口名、接口参数、源端应用名、源端插件名和请求标识;
3、外部应用通过以太网接收远程调用请求并将其发送至目的插件对应的消息队列中;
4、目的插件的绑定线程访问消息队列以获取远程调用请求;
5、绑定线程从远程调用请求提取消息内容,根据目的插件名在插件接口表地址表中查询对应的插件接口表地址;
6、根据插件接口表地址访问插件接口表,匹配接口名对应的接口地址,传递接口参数直接进行接口调用。
本发明提供的支持插件接口同步异步统一调用的方法及微内核架构,通过应用定位表、映射结构表、消息队列和线程池实现了进程内、进程间插件接口的同步或异步调用,其中,根据在框架内部构造的应用定位表确定一次调用是调用同一个应用进程内部插件的接口还是调用外部应用进程的插件接口;通过支持信息查找的映射结构表简化了插件接口交互调用过程中的复杂调用关系,使得微内核架构既可以作为单一应用的软件架构,也可以扩展作为分布式应用的软件架构,提升了微内核架构的延展性;且使得开发单一应用软件和分布式应用软件时,对插件接口的调用具有统一的范式,可有效降低开发人员对于场景理解的要求。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种支持插件接口同步异步统一调用的方法,其特征在于,包括以下步骤:
S1:各应用程序中的框架分别为其应用创建应用定位表以存储使用同一框架的其它应用程序的定位信息,并分别创建映射结构表以存储应用中的插件名、插件接口名和插件接口地址的映射关系;
S2:通过所述应用定位表和映射结构表查找待调用的插件接口属于本地应用或外部应用;若是本地应用,则进入步骤S3;若是外部应用,则进入步骤S6;
S3:根据不同的调用接口区分本次调用为本地应用内的同步调用或异步调用,所述调用接口包括同步调用接口和异步调用接口;若是同步调用,则进入步骤S4;若是异步调用,进入步骤S5;
S4:待调用插件通过本地应用的映射结构表查找待调用的插件接口地址并直接进行接口调用;
S5:构造远程调用消息并插入到待调用插件的消息队列中;待调用插件通过本地应用的映射结构表查找待调用的插件接口地址并进行接口调用;
S6:构造远程调用消息并发送到外部应用,外部应用通过其对应的映射结构表查找待调用的插件接口地址并进行接口调用;若为同步调用,则本地应用同步等待外部应用对接口调用结果的回复消息。
2.如权利要求1所述的支持插件接口同步异步统一调用的方法,其特征在于,步骤S1中,所述映射结构表的创建过程包括以下子步骤:
S11:加载插件的初始化接口并注册插件内的所有插件接口;
S12:以插件为单位创建插件接口表,枚举插件内所有的插件接口并分别为所述插件接口生成插件接口名、接口ID和接口地址;
S13:将插件名与插件接口表地址绑定以建立两者的对应关系,生成插件接口表地址表。
3.如权利要求2所述的支持插件接口同步异步统一调用的方法,其特征在于,步骤S4具体包括:在所述插件接口表地址表中查找待调用插件对应的插件接口表地址;根据所述插件接口表地址访问对应的插件接口表,匹配插件接口地址并直接进行接口调用。
4.如权利要求2所述的支持插件接口同步异步统一调用的方法,其特征在于,步骤S2之前还包括以下步骤:
分别为各插件创建消息队列以按序存储插件接收的远程调用请求;将插件接收的远程调用请求的处理任务附加到插件的绑定线程中。
5.如权利要求4所述的支持插件接口同步异步统一调用的方法,其特征在于,所述步骤S5中接口调用的过程包括以下步骤:
S51:待调用插件的绑定线程访问其消息队列以获取远程调用消息;
S52:从所述远程调用消息中提取出待调用的插件名,根据所述插件名在插件接口表地址表中查找对应的插件接口表地址;
S53:根据所述插件接口表地址访问插件接口表,传递接口参数并直接进行接口调用。
6.如权利要求4所述的支持插件接口同步异步统一调用的方法,其特征在于,所述步骤S6中接口调用的过程包括以下步骤:
S61:外部应用接收远程调用消息并将其插入到待调用插件的消息队列中;
S62:待调用插件的绑定线程访问其消息队列以获取远程调用消息;
S63:从所述远程调用消息中提取出待调用的插件名,根据所述插件名在插件接口表地址表中查找对应的插件接口表地址;
S64:根据所述插件接口表地址访问插件接口表,传递接口参数并直接进行接口调用。
7.如权利要求1所述的支持插件接口同步异步统一调用的方法,其特征在于,所述远程调用消息包括消息ID、目的应用名、目的插件名、接口名、接口参数、源端应用名、源端插件名和请求标识。
8.如权利要求7所述的支持插件接口同步异步统一调用的方法,其特征在于,步骤S6中同步调用过程具体包括:外部应用根据所述请求标识构造接口调用结果的回复消息;本地应用不断拉取其消息队列中的所述回复消息并检查其是否与请求标识相匹配。
9.一种支持插件接口同步异步统一调用的微内核架构,包括核心系统和多个插件,其特征在于,还包括应用定位表、消息队列、线程池和映射结构表;
所述应用定位表用于存储使用同一微内核架构的多个应用程序的定位信息以路由同一应用进程内及不同应用进程间的插件接口的交互调用;
所述映射结构表用于对应存储一个应用程序中的插件名、插件接口名、插件接口地址之间的映射关系;
所述线程池包括多个线程,每个所述线程对应绑定一个插件以从所述插件对应的消息队列中拉取远程调用请求,并从所述远程调用消息中提取出待调用的插件名,根据所述映射结构表查找待调用的插件接口地址,匹配后直接进行接口调用,实现同一应用进程内的插件接口的异步调用,以及应用进程间的插件接口的同步或异步调用。
10.如权利要求9所述的支持插件接口同步异步统一调用的微内核架构,其特征在于,所述映射结构表包括插件接口表地址表,以及与所述插件的数量一致的插件接口表;
所述插件接口表用于对应存储一个插件在核心系统中注册的多个插件接口的接口名、ID和接口地址;
所述插件接口表地址表用于存储多个插件的插件名及其对应的插件接口表地址的对应关系。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810829640.1A CN109240758B (zh) | 2018-07-25 | 2018-07-25 | 一种支持插件接口同步异步统一调用的方法及微内核系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810829640.1A CN109240758B (zh) | 2018-07-25 | 2018-07-25 | 一种支持插件接口同步异步统一调用的方法及微内核系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109240758A true CN109240758A (zh) | 2019-01-18 |
CN109240758B CN109240758B (zh) | 2021-10-29 |
Family
ID=65072412
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810829640.1A Active CN109240758B (zh) | 2018-07-25 | 2018-07-25 | 一种支持插件接口同步异步统一调用的方法及微内核系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109240758B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109901885A (zh) * | 2019-01-22 | 2019-06-18 | 中电和瑞科技有限公司 | 一种数据交互方法、插件管理器与计算机可读存储介质 |
CN110309006A (zh) * | 2019-06-28 | 2019-10-08 | 百度在线网络技术(北京)有限公司 | 一种功能调用方法、装置、终端设备及存储介质 |
CN110309005A (zh) * | 2019-06-28 | 2019-10-08 | 百度在线网络技术(北京)有限公司 | 一种功能调用方法、装置、终端设备及存储介质 |
CN110413317A (zh) * | 2019-08-02 | 2019-11-05 | 四川新网银行股份有限公司 | 基于配置化的流程接口调用方法 |
CN110471778A (zh) * | 2019-07-15 | 2019-11-19 | 北京交大微联科技有限公司 | 插件管理系统及方法 |
CN110737428A (zh) * | 2019-10-21 | 2020-01-31 | Oppo广东移动通信有限公司 | 基于Hidl的通用接口设计方法、装置、终端及可读存储介质 |
CN111611065A (zh) * | 2020-05-29 | 2020-09-01 | 远光软件股份有限公司 | 机器学习算法的调用方法、装置、存储介质及电子设备 |
CN112559093A (zh) * | 2020-12-09 | 2021-03-26 | 深圳乐播科技有限公司 | 接口调用方法、装置及存储介质 |
CN114691235A (zh) * | 2022-03-22 | 2022-07-01 | 上海智殷自动化科技有限公司 | 一种支持插件间数据自由交互的方法 |
CN115373717A (zh) * | 2022-10-25 | 2022-11-22 | 成都中科合迅科技有限公司 | 自定义微内核实现进程插件化方法 |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1252561A (zh) * | 1998-07-31 | 2000-05-10 | 索尼英国有限公司 | 数据处理 |
US20050160358A1 (en) * | 2004-01-20 | 2005-07-21 | International Business Machines Corporation | Method and system for creating and rendering client-side user interfaces via custom tags |
US20090300653A1 (en) * | 1999-01-29 | 2009-12-03 | Iona Technologies, Plc | Method and system for dynamic configuration of interceptors in a client-server environment |
CN102141922A (zh) * | 2010-01-29 | 2011-08-03 | 腾讯科技(深圳)有限公司 | 一种微内核插件化程序应用系统及其实现方法 |
CN105573789A (zh) * | 2015-09-07 | 2016-05-11 | 武汉精测电子技术股份有限公司 | 基于软核处理器的fpga多镜像升级加载方法及装置 |
CN105930181A (zh) * | 2016-04-12 | 2016-09-07 | 重庆金美通信有限责任公司 | 基于插件机制的运行时界面集成方法 |
CN106406929A (zh) * | 2016-08-25 | 2017-02-15 | 成都交大光芒科技股份有限公司 | 分布式信息化应用集成平台应用插件容器实现方法 |
CN106445598A (zh) * | 2016-09-28 | 2017-02-22 | 北京奇虎科技有限公司 | 插件加载方法及装置 |
CN107589970A (zh) * | 2016-07-08 | 2018-01-16 | 深圳联友科技有限公司 | 一种插件调用方法及装置 |
CN107870787A (zh) * | 2016-09-26 | 2018-04-03 | 平安科技(深圳)有限公司 | 应用程序插件化加载方法及系统 |
CN108008995A (zh) * | 2017-12-04 | 2018-05-08 | 山东浪潮通软信息科技有限公司 | 一种基于调用类型的等待组件实现方法及装置 |
CN108255853A (zh) * | 2016-12-29 | 2018-07-06 | 卓望数码技术(深圳)有限公司 | 一种插件式的请求异步处理方法以及系统 |
CN108255545A (zh) * | 2016-12-28 | 2018-07-06 | 阿里巴巴集团控股有限公司 | 组件间的功能调用方法、装置及组件化架构系统 |
-
2018
- 2018-07-25 CN CN201810829640.1A patent/CN109240758B/zh active Active
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1252561A (zh) * | 1998-07-31 | 2000-05-10 | 索尼英国有限公司 | 数据处理 |
US20090300653A1 (en) * | 1999-01-29 | 2009-12-03 | Iona Technologies, Plc | Method and system for dynamic configuration of interceptors in a client-server environment |
US20050160358A1 (en) * | 2004-01-20 | 2005-07-21 | International Business Machines Corporation | Method and system for creating and rendering client-side user interfaces via custom tags |
CN102141922A (zh) * | 2010-01-29 | 2011-08-03 | 腾讯科技(深圳)有限公司 | 一种微内核插件化程序应用系统及其实现方法 |
CN105573789A (zh) * | 2015-09-07 | 2016-05-11 | 武汉精测电子技术股份有限公司 | 基于软核处理器的fpga多镜像升级加载方法及装置 |
CN105930181A (zh) * | 2016-04-12 | 2016-09-07 | 重庆金美通信有限责任公司 | 基于插件机制的运行时界面集成方法 |
CN107589970A (zh) * | 2016-07-08 | 2018-01-16 | 深圳联友科技有限公司 | 一种插件调用方法及装置 |
CN106406929A (zh) * | 2016-08-25 | 2017-02-15 | 成都交大光芒科技股份有限公司 | 分布式信息化应用集成平台应用插件容器实现方法 |
CN107870787A (zh) * | 2016-09-26 | 2018-04-03 | 平安科技(深圳)有限公司 | 应用程序插件化加载方法及系统 |
CN106445598A (zh) * | 2016-09-28 | 2017-02-22 | 北京奇虎科技有限公司 | 插件加载方法及装置 |
CN108255545A (zh) * | 2016-12-28 | 2018-07-06 | 阿里巴巴集团控股有限公司 | 组件间的功能调用方法、装置及组件化架构系统 |
CN108255853A (zh) * | 2016-12-29 | 2018-07-06 | 卓望数码技术(深圳)有限公司 | 一种插件式的请求异步处理方法以及系统 |
CN108008995A (zh) * | 2017-12-04 | 2018-05-08 | 山东浪潮通软信息科技有限公司 | 一种基于调用类型的等待组件实现方法及装置 |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109901885A (zh) * | 2019-01-22 | 2019-06-18 | 中电和瑞科技有限公司 | 一种数据交互方法、插件管理器与计算机可读存储介质 |
CN110309006A (zh) * | 2019-06-28 | 2019-10-08 | 百度在线网络技术(北京)有限公司 | 一种功能调用方法、装置、终端设备及存储介质 |
CN110309005A (zh) * | 2019-06-28 | 2019-10-08 | 百度在线网络技术(北京)有限公司 | 一种功能调用方法、装置、终端设备及存储介质 |
CN110309005B (zh) * | 2019-06-28 | 2022-03-25 | 百度在线网络技术(北京)有限公司 | 一种功能调用方法、装置、终端设备及存储介质 |
CN110471778B (zh) * | 2019-07-15 | 2022-03-11 | 北京交大微联科技有限公司 | 插件管理系统及方法 |
CN110471778A (zh) * | 2019-07-15 | 2019-11-19 | 北京交大微联科技有限公司 | 插件管理系统及方法 |
CN110413317A (zh) * | 2019-08-02 | 2019-11-05 | 四川新网银行股份有限公司 | 基于配置化的流程接口调用方法 |
CN110413317B (zh) * | 2019-08-02 | 2023-06-06 | 四川新网银行股份有限公司 | 基于配置化的流程接口调用方法 |
CN110737428A (zh) * | 2019-10-21 | 2020-01-31 | Oppo广东移动通信有限公司 | 基于Hidl的通用接口设计方法、装置、终端及可读存储介质 |
CN110737428B (zh) * | 2019-10-21 | 2023-08-15 | Oppo广东移动通信有限公司 | 基于Hidl的通用接口设计方法、装置、终端及可读存储介质 |
CN111611065A (zh) * | 2020-05-29 | 2020-09-01 | 远光软件股份有限公司 | 机器学习算法的调用方法、装置、存储介质及电子设备 |
CN111611065B (zh) * | 2020-05-29 | 2023-08-11 | 远光软件股份有限公司 | 机器学习算法的调用方法、装置、存储介质及电子设备 |
CN112559093A (zh) * | 2020-12-09 | 2021-03-26 | 深圳乐播科技有限公司 | 接口调用方法、装置及存储介质 |
CN114691235A (zh) * | 2022-03-22 | 2022-07-01 | 上海智殷自动化科技有限公司 | 一种支持插件间数据自由交互的方法 |
CN114691235B (zh) * | 2022-03-22 | 2024-03-22 | 上海智殷自动化科技有限公司 | 一种支持插件间数据自由交互的方法 |
CN115373717A (zh) * | 2022-10-25 | 2022-11-22 | 成都中科合迅科技有限公司 | 自定义微内核实现进程插件化方法 |
CN115373717B (zh) * | 2022-10-25 | 2022-12-16 | 成都中科合迅科技有限公司 | 自定义微内核实现进程插件化方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109240758B (zh) | 2021-10-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109240758A (zh) | 一种支持插件接口同步异步统一调用的方法及微内核架构 | |
EP3667500B1 (en) | Using a container orchestration service for dynamic routing | |
US5848234A (en) | Object procedure messaging facility | |
JP3954689B2 (ja) | メッセージ処理方法、メッセージ処理装置及びメッセージ処理を制御するプログラムを格納する記憶媒体 | |
US7428597B2 (en) | Content-based routing system and method | |
US8539061B2 (en) | Systems and methods for web service architectures | |
CN109992595A (zh) | 异构数据库转换方法、装置、设备和存储介质 | |
USRE44534E1 (en) | Dynamic machine synthesis for wireless device access and management | |
US7873650B1 (en) | System and method for distributing data in a parallel processing system | |
CN111147308B (zh) | 基于微服务架构的网络管理方法和系统 | |
CN109634764A (zh) | 工作流控制方法、装置、设备、存储介质和系统 | |
CN113766042A (zh) | 一种容器地址的配置方法、系统、装置、设备及介质 | |
CN112333017A (zh) | 一种服务配置方法、装置、设备及存储介质 | |
CN109739666A (zh) | 单例方法的跨进程调用方法、装置、设备及存储介质 | |
CN109739665A (zh) | 接口管理方法、装置、服务器及存储介质 | |
CN112527471B (zh) | 任务处理方法及其装置、存储介质 | |
CN106161157B (zh) | 智能家居系统的搭建方法、装置、智能家居系统及终端 | |
CN101288073A (zh) | 用于利用多种查询语言检索信息的系统、方法和软件 | |
CN104133722A (zh) | 一种实现多业务流程协作的方法及系统 | |
CN109669793A (zh) | 中间件进程内对象调用方法 | |
CN114610290A (zh) | 一种数字智能工业组态系统 | |
Hahn et al. | Modeling data transformations in data-aware service choreographies | |
CN111984679B (zh) | 硬件加速数据库的访问方法、装置、主机、系统及介质 | |
US8266234B1 (en) | System and method for enhancing system reliability using multiple channels and multicast | |
JP2008305205A (ja) | フロー処理構築装置、フロー処理構築方法及びプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |