CN112068902A - 一种插件调用方法、装置、电子设备及存储介质 - Google Patents

一种插件调用方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN112068902A
CN112068902A CN202010949922.2A CN202010949922A CN112068902A CN 112068902 A CN112068902 A CN 112068902A CN 202010949922 A CN202010949922 A CN 202010949922A CN 112068902 A CN112068902 A CN 112068902A
Authority
CN
China
Prior art keywords
plug
service
module
execution
logic
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
Application number
CN202010949922.2A
Other languages
English (en)
Other versions
CN112068902B (zh
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.)
Beijing 58 Information Technology Co Ltd
Original Assignee
Beijing 58 Information Technology 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 Beijing 58 Information Technology Co Ltd filed Critical Beijing 58 Information Technology Co Ltd
Priority to CN202010949922.2A priority Critical patent/CN112068902B/zh
Publication of CN112068902A publication Critical patent/CN112068902A/zh
Application granted granted Critical
Publication of CN112068902B publication Critical patent/CN112068902B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • G06F9/44526Plug-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

一种插件调用方法、装置、电子设备及存储介质
技术领域
本发明涉及计算机技术领域,特别是涉及一种插件调用方法、装置、电子设备及存储介质。
背景技术
现有业务系统(比如租房、二手房、商业地产、小区、经纪人等)的web层与底层的基础微服务层等存在较多分散业务,日常工作避免不了根据业务需求频繁迭代。如此多的业务系统分布在了不同的子部门及更细化的开发小组中,大家都有一些共性的技术型需求,如接口监控、报警、容灾(灾备)、服务降级、过载保护等等,虽然现有的架构可以提供强大的服务管理平台,但是每个业务系统又有不同的需求,比如,在对现有系统不同框架(比如web框架或微服务框架等)进行开发或更新时,想要复用如接口监控,报警,容灾,服务降级和过载保护等这些功能时,由于大部分参数都写死在代码中,则需要对现有系统中不同框架或多或少的进行不同开发,没办法做到无缝接入待现有系统的不同框架中。
所以,在对相关系统框架的开发中,由于大部分参数都写死在系统代码中,在接入目标框架的过程中,需要针对不同的目标框架采用不同的切入方案,则需要很多额外的开发量,没办法做到无缝接入;针对现有系统的开发,也无法满足所有框架,比如,支持web框架的无法支持微服务框架,支持了微服务框架的又不支持内部方法的直接调用等;如果接入过多需求,很多需求都是串行累加的,从而会导致业务性能大幅度降低,即降低了系统性能,有可能导致系统重构。
因此,如何无缝接入到不同的目标框架,且简化业务开发的业务量,以及提高业务的性能,是目前有待解决的技术问题。
发明内容
本发明实施例所要解决的技术问题是提供一种插件调用方法,以解决现有技术中由于不能无缝接入到不同的目标框架上,导致业务开发量大,成本增加,性能低的技术问题。
相应的,本发明实施例还提供了一种插件调用装置、电子设备及存储介质,用以保证上述方法的实现及应用。
为了解决上述问题,本发明是通过如下技术方案实现的:
第一方面提供一种插件调用方法,所述方法包括:
在检测到业务调用方发送的业务请求时,获取所述业务请求对应的业务框架的插件器;
确定所述插件器需要执行的插件,所述插件包括一个插件或关联的多个插件,每个插件为实现了指定接口的插件注解和插件注解实现类的插件;
如果所述插件的执行方式为同步执行,则按照所述插件的顺序从插件仓库中调用对应插件的执行前逻辑;
在所述插件执行完成对应的执行前逻辑后,如果需要调用正常业务逻辑,则采用反射方式调用业务方法来执行正常业务逻辑;
获取所述正常业务逻辑执行完成后的业务返回结果;
将所述业务返回结果反馈给所述业务调用方
第二方面提供一种插件调用装置,所述装置包括:
第一获取模块,用于在检测到业务调用方发送的业务请求时,获取所述业务请求对应的业务框架的插件器;
确定模块,用于确定所述插件器需要执行的插件,所述插件包括一个插件或关联的多个插件,每个插件为实现了指定接口的插件注解和插件注解实现类的插件;
第一调用模块,用于在所述确定模块确定所述插件的执行方式为同步执行时,按照所述插件的顺序从插件仓库中调用对应插件的执行前逻辑;
第二调用模块,用于在每个所述插件执行完成对应的执行前逻辑后,如果需要调用正常业务逻辑,则采用反射方式调用业务方法来执行正常业务逻辑;
第二获取模块,用于获取所述正常业务逻辑执行完成后的业务返回结果;
第一发送模块,用于将所述业务返回结果反馈给所述业务调用方。
第三方面提供一种插件调用装置,所述装置包括:
初始化模块,用于在检测到业务工程项目启动时,扫描所述业务工程项目所需的工程代码以及参数类目录,以及标记所述业务工程项目下所有插件注解的服务类及插件实现类,并将标记的所述插件注解的服务类和插件实现类发送到插件仓库模块中进行存储;
框架切入模块,用于为待切入的每个业务工程项目创建插件器,将创建的所述每个业务工程项目的插件器切入到对应业务工程项目使用的业务框架中,以便于通过所述业务框架调用业务方法时正常调用对应的插件器;
公共核心代理模块,用于在检测到业务调用方发送的业务请求时,通过所述框架切入模块获取到与所述业务请求对应的所述业务框架的插件器,以及确定所述插件器需要执行的插件,所述插件包括一个插件或关联的多个插件,每个插件为实现了指定接口的插件注解和插件注解实现类的插件,以及在所述插件的执行方式为同步执行时,按照所述插件的顺序从所述插件仓库模块中调用对应插件的执行前逻辑,在所述插件执行完成对应的执行前逻辑后,如果需要调用正常业务逻辑,则采用反射调用业务方法来执行所述正常业务逻辑;以及根据所述插件器的需求,则按照所述顺序的逆序从所述插件仓库中调用对应插件的执行后逻辑,在按照所述顺序的逆序执行完所述插件的执行后逻辑后,将执行后逻辑后得到的结果反馈给所述业务调用方;
插件仓库模块,用于存储所述初始化模块扫描得到的业务工程项目所需的工程代码以及参数类目录,以及标记的所述插件注解的服务类和插件实现类的整体包,并通过插件同步执行实现接口和插件异步执行实现接口为所述公共核心代理模块提供对应的插件。
第四方面提供一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上所述的插件调用方法。
第五方面提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被电子设备的处理器执行时实现如上所述的插件调用方法。
第六方面,提供根据一种计算机程序产品,当所述计算机程序产品中的指令由电子设备的处理器执行时,使得所述电子设备执行如上述所述的任一种插件调用方法。
与现有技术相比,本发明实施例包括以下优点:
本发明实施例中,在检测到业务调用方发送的业务请求时,获取所述业务请求对应的业务框架的插件器;确定所述插件器需要执行的插件,所述插件包括一个插件或关联的多个插件,每个插件为实现了指定接口的插件注解和插件注解实现类的插件;如果所述插件的执行方式为同步执行,则按照所述插件的顺序从插件仓库中调用对应插件的执行前逻辑;在所述插件执行完成对应的执行前逻辑后,如果没有被拦截,则采用反射方式调用业务方法来执行正常业务逻辑;获取所述正常业务逻辑执行完成后的业务返回结果;将所述业务返回结果反馈给所述业务调用方。也就是说,本发明实施例中,一次性开发与接入,所有按标准开发后带有指定接口的插件注解和插件注解实现类的插件适用于所有业务框架,扩展插件依赖注解配置,由于各个插件之间互相不依赖,对业务系统侵入性近乎为零,实现了功能解耦,本实施例自定义插件开发,除插件仓库中的公共插件可以随便供大家使用外,使用者还可随时开发专属于自己业务的插件放到自己的工程项目中,插件器同样可以自动加载并运行。本发明实施例实现了无缝接入到不同的业务框架中,简少了业务开发量,节省了成本,以及提高了业务的性能。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
图1是本发明实施例提供的一种插件调用方法的流程图;
图2是本发明实施例提供的一种插件处理方法的应用实例的流程图;
图3是本发明实施例提供的一种插件调用装置的结构示意图;
图4是本发明实施例提供的一种插件调用装置的另一结构示意图;
图5是本发明实施例提供的一种插件调用装置的再一结构示意图;
图6是本发明实施例提供的一种插件调用装置的又一结构示意图;
图7是本发明实施例提供的一种插件调用装置的另一结构示意图;
图8是本发明实施例提供的一种插件调用装置的另一结构示意图;
图9是本发明实施例提供的一种插件调用装置的另一结构示意图;
图10是本发明实施例提供的一种插件调用装置的另一结构示意图;
图11是本发明实施例提供的一种插件调用装置的应用实例的结构示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
在介绍本发明实施例前,先理解下述技术术语;
横切关注点:在软件开发中,散布于应用中多处的相同功能被称为横切关注点。
面向切面:在运行时,动态地将代码切入到类的指定“横切关注点”上。
插件:一种遵循一定规范的应用程序接口编写出来的程序。其只能运行在程序规定的系统平台下(可能同时支持多个平台),而不能脱离指定的平台单独运行。
插件仓库:用来存储插件并维护插件的一个虚拟仓库。
插件器:管理并支持各类插件在其之上运行的软件容器。具体的,插件器是一个仅依赖于cglib和slf4j的轻量级aop框架,支持同步和异步模式。插件器附带scf和wf的对接api,可以直接在scf和wf中使用。
面向切面的插件器:实际上就是使用面向切面的思想开发一套插件器,并提供一系列现成完整的插件仓库给使用者,并支持根据业务需要开发自定义插件并无侵入性地嵌入到插件器中。
SCF:是一套自定义的远程服务通信框架(Service Communication Framework),支持跨平台,具有高并发,高性能,高可靠性,并提供异步、多协议、事件驱动的中间层服务框架。
WF:是Web Framework网页架构的缩写,它是自定义的一款基于JAVA语言的MVC开发框架,主要应用于基于JAVA的的Web项目。
注解:又称Java标注,是JDK5.0引入的一种注释机制,可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。
在理解上述技术术语后,请参阅图1,为本发明实施例提供的一种插件调用方法的流程图,具体可以包括如下步骤:
步骤101:在检测到业务调用方发送的业务请求时,获取所述业务请求对应的业务框架的插件器;
步骤102:确定所述插件器需要执行的至少一个插件,其中,所述至少一个插件中的每个插件分别实现了指定接口的插件注解和插件注解实现类;
步骤103:如果所述至少一个插件的执行方式为同步执行,则按照所述插件的顺序从插件仓库中调用对应插件的执行前逻辑;
步骤104:在每个所述插件执行完对应的执行前逻辑后,如果需要调用正常业务逻辑,则采用反射调用业务方法来执行正常业务逻辑;
步骤105:获取所述正常业务逻辑执行完成后的业务返回结果;
步骤106:将所述业务返回结果反馈给所述业务调用方。
本发明实施例提供的插件调用方法,可以应用于移动终端、服务器、客户端、后端或系统等,在此不作限制,其实施设备可以是智能手机,笔记本电脑、平板电脑等电子设备,在此也不作限制。
下面结合图1,对本发明实施例提供的插件调用方法的具体实施步骤进行详细说明。
首先,执行步骤101,在检测到业务调用方发送的业务请求时,获取所述业务请求对应的业务框架的插件器;
其中,该实施例中,需要先完成工程框架下的项目的启动操作,之后,才可以进行业务执行的流程。当业务调用方发起业务请求时,即插件器检测到业务请求时,获取所述业务请求对应的业务框架的插件器;即会经过工程框架的默认过滤器从而调用到插件器,然后执行步骤102。
其中,本实施例的业务框架以包括wf工程、scf工程、普通类调用等工程项目下的业务框架等为例,每个业务框架都有对应的插件器,该插件器为面向切面的插件器,插件器通过框架切入模块或切入器融入到对应的业务框架中。但在实际应用中,并不限于此,还可以包括其他工程项目中的业务框架,本实施例不做限制。
其次,执行步骤102,确定所述插件器需要执行的插件,所述插件包括一个插件或关联的多个插件,每个插件为实现了指定接口的插件注解和插件注解实现类的插件。
在该步骤中,通过扫描插件器,就可以得到该插件器负责匹配及过滤业务方法中是否有需要关联执行的插件,需要执行的插件可以是一个,也可以是关联的多个插件,本实施例不做限制。当匹配到需要关联执行的一个或关联的多个插件时,,由于每个插件实现了指定接口的插件注解和插件注解实现类,可以根据每个插件实现了指定接口的插件注解和插件注解实现类,再进一步去判断每个插件的执行方式是同步执行还是异步执行。
再次,执行步骤103,如果所述插件的执行方式为同步执行,则按照所述插件的顺序从插件仓库中调用对应插件的执行前(before)逻辑;
具体的,该步骤中,如果需要执行的插件是一个,则直接从插件仓库中调用该插件的执行前逻辑,如果需要执行的插件是关联的多个插件,则按照所述多个插件的顺序从插件仓库中调用对应插件的执行前逻辑。
其中,插件仓库中预先存储有多个插件,每个插件实现了指定接口的插件注解和插件注解实现类。比如,存储有自动化缓存插件,日志打印插件,调用统计参加,参数验证插件,异常监控处理插件,超时监控插件等。也就是说,插件仓库中,存储有业务工程项目所需的工程代码以及参数类目录,以及标记的所述插件注解的服务类和插件实现类的整体包,并通过插件同步执行实现接口和插件异步执行实现接口为所述公共核心代理模块提供对应的业务调度。即存储有业务工程项目下所有插件及插件实现。通常情况下,插件仓库的结构包括插件声明和插件实现两个模块。
需要说明的是,当有关联的多个插件时,需要按照关联的多个插件的顺序创建并调用插件的执行前(before)逻辑。其中,插件的执行前逻辑,比如可以是鉴权,登录,注册等。
再次,执行步骤104,在所述插件执行完成对应的执行前逻辑后,如果没有被拦截,则采用反射方式调用业务方法来执行正常业务逻辑。
也就是说,在执行所述插件执行完成对应的的执行前逻辑后,判断是否需要调用正常业务逻辑,如果需要调用,即该调用没有被拦截,则采用反射方式调用业务方法来执行所述真正的业务逻辑,其中,所述业务方法中包括插件注解,该业务逻辑就是对业务的一种保护,比如查找,拦截,删除等。也就是说,在每个插件都执行完对应的执行前before逻辑后,如果没有被拦截,则正常采用反射方式调用业务方法来执行真正的业务逻辑(即正常业务逻辑)。
当然,如果不需要调用,则该调用被拦截,并将调用异常结果直接反馈给所述业务调用方。
再次,执行步骤105,获取所述正常业务逻辑执行完成后的业务返回结果。
该步骤中,在正常业务逻辑执行完成后,获取执行完成后的业务返回结果,以及在获取到业务返回结果后,根据插件自身需求,再决定是否调用插件的执行后(after)逻辑。其中,插件的执行后逻辑,比如渲染,在加工等操作。
最后,执行步骤106,将所述业务返回结果反馈给所述业务调用方。
本发明实施例中,在检测到业务调用方发送的业务请求时,获取所述业务请求对应的业务框架的插件器;确定所述插件器需要执行的插件,所述插件包括一个插件或关联的多个插件,每个插件为实现了指定接口的插件注解和插件注解实现类的插件;如果所述插件的执行方式为同步执行,则按照所述插件的顺序从插件仓库中调用对应插件的执行前逻辑;在所述插件执行完成对应的执行前逻辑后,如果没有被拦截,则采用反射方式调用业务方法来执行正常业务逻辑;获取所述正常业务逻辑执行完成后的业务返回结果;将所述业务返回结果反馈给所述业务调用方。也就是说,本发明实施例中,一次性开发与接入,所有按标准开发后带有指定接口的插件注解和插件注解实现类的插件适用于所有业务框架,扩展插件依赖注解配置,由于各个插件之间互相不依赖,对业务系统侵入性近乎为零,实现了功能解耦,本实施例自定义插件开发,除插件仓库中的公共插件可以随便供大家使用外,使用者还可随时开发专属于自己业务的插件放到自己的工程项目中,插件器同样可以自动加载并运行。本发明实施例实现了无缝接入到不同的业务框架中,简少了业务开发量,节省了成本,以及提高了业务的性能。
可选的,在另一实施例中,该实施例在上述实施例的基础上,在每个所述插件的执行前逻辑执行完成后,所述方法还可以包括:
根据所述插件器的需求,判断是否需要调用业务逻辑;如果需要调用,则该调用不会被拦截,就可以采用反射方式调用业务方法来执行正常业务逻辑;如果不需要调用,则该调用会被拦截,并将调用异常结果反馈给所述业务调用方。
该实施例中,在每个所述插件的执行前逻辑都执行完成后,根据所述插件器的需求,判断是否需要调用业务逻辑,并根据判断结果确定是否调用所述业务逻辑,并反馈是否调用业务逻辑的调用结果给所述业务调用方。
可选的,在另一实施例中,该实施例在上述实施例的基础上,所述方法还可以包括:如果所述插件的执行方式为异步执行,则所述插件的功能存储到异步线程池中独立运行,以便于所述异常线程池通过插件器的上下文描述匹配每个插件的执行前逻辑和执行后逻辑,其中,所述上文描述至少包括:服务名称、业务方法名称、参数类型、参数值以及本次调用的会话标识sessionid。需要说明的是,服务器上为每个用户(比如业务调用方等)都保存了一个session,每一个session都有一个id来作为标识,这个id会传到客户端(比如业务调用方等),每次客户端请求都会把这个id传到服务器,服务器根据id来匹配这次请求应该使用哪个session。也就是说,sessionid存放在服务器内存和客户端的Cookie里面。当用户发出请求时,服务器将用户Cookie里面记录的SessionID和服务器内存中的SessionID进行比对,从而找到这个用户对应的Session进行操作。
该实施例中,如果插件的执行方式异步执行,则创建相关的插件放入到异步线程池中进行独立运行,也就是由异步线程池通过插件仓库的插件异步执行实现接口从该插件仓库中获取对应插件执行前逻辑。
可选的,在另一实施例中,该实施例在上述实施例的基础上,在将所述业务返回结果反馈给所述业务调用方前,所述方法还可以包括:
根据所述插件器的需求,则按照所述顺序的逆序从所述插件仓库中调用对应插件的执行后逻辑;按照所述逆序在每个所述插件执行完成对应的执行后逻辑后,将执行后逻辑后得到的结果反馈给所述业务调用方。
该实施中,在正常业务逻辑执行完成后,获取到业务返回结果后,再根据所述插件器的需求,按照所述顺序的逆序调用插件的执行后(after)逻辑。比如,如果相关插件器的执行过程为:先按照顺序执行插件一的执行前逻辑,再执行插件二的执行前逻辑,以及执行插件三的执行前逻辑,然后,如果允许执行正常业务逻辑,就执行正常业务逻辑,之后,按照顺序的逆序,先执行插件三的执行后逻辑,再执行插件二的执行后逻辑,以及执行插件一的执行后逻辑。其具体的处理过程与插件执行前的过程类似,具体详见上述,在此不再赘述。经过插件的执行后after逻辑处理后,则将执行后逻辑的执行后真正的处理结果返回给业务调用方,该处理结果可以上述上述业务返回结果。
可选的,在另一实施例中,该实施例在上述实施例的基础上,所述方法还可以包括:
在检测到业务工程项目启动时,扫描所述业务工程项目所需的工程代码以及参数类目录;标记所述业务工程项目下所有插件注解的服务类及插件实现类;将标记的所述插件注解的服务类和插件实现类发送到插件仓库模块中进行存储。
该实施例中,在检测到业务工程项目启动时,先对各个业务工程的jar包及参数(class)类目录扫描,将扫描结果中所有包含插件注解的服务类存放到内存(即插件仓库)中以备用。同时,标记业务工程项目下的所有插件及插件实现类(即实现了DefinedPluginImpl的注解),并放入内存中以备用。
可选的,在另一实施例中,该实施例在上述实施例的基础上,所述方法还包括:
为待切入的每个业务工程项目创建插件器;将创建的所述每个业务工程项目的插件器切入到对应的业务工程项目使用的业务框架中,以便于通过所述业务框架调用业务方法时能正常调用对应的插件器。
该实施例中,先为待切入的每个业务工程项目创建插件器,即为不同的业务工程创建不同的插件器;并为异常加载的插件,创建异步插件器的多线程(即异步线程池),供后续异步插件执行时使用。
也就是,该实施例可以通过不同的业务框架的插件器,将插件器切入到对应的工程框架中,确保调用业务方法时能正常调用插件器。
还请参阅图2,为本发明实施例提供的一种插件处理方法的应用实例的流程图,该方法以一个正常的业务调用及插件器加载执行过程为例,所述方法涉及到的实体模块业务调用方,初始化模块,处理模块,业务逻辑模块,异步线程池,插件仓库,由图2所示:
首先,初始化模块启动业务工程项目的初始化。其中,该步骤,具体包括:
1)在检测到业务工程项目启动时,扫描所述业务工程项目所需的工程代码以及参数(class)类目录;标记所述业务工程项目下所有插件注解的服务类及插件实现类;将标记的所述插件注解的服务类和插件实现类发送到插件仓库模块中进行存储。
其中,扫描工程项目的固定包名下的所有类、方法名的一种扫描方式如程序段1所示,在实际应用中并不限于此:
(1)
Figure BDA0002676589720000111
其扫描的目的就是扫描所需业务的所有类文件,将标记为需支持插件的类及方法放到内存的插件仓库中,也就是为了在公共核心代理调用到该方法时可以实时从内存的插件仓库中找到该标记并切入适当的插件功能。主要为公共核心代理层做基本物料的准备。
其中,扫描工程项目下所有插件及插件实现,如程序段(2)所示,
(2)
Figure BDA0002676589720000112
需要说明的是,该扫描方式采用了“规约大于配置”的策略,插件的本质就是实现了指定接口的插件注解和插件注解实现类,将每个插件的注解和注解实现存储到内存的插件仓库中。同样也是为了公共核心代理层做基本物料的准备。
2)为待切入的每个业务工程项目创建插件器;将创建的所述每个业务工程项目的插件器通过切入器切入到对应的业务工程项目使用的业务框架中,以便于通过所述业务框架调用业务方法时能正常调用对应的插件器。
下面以scf服务框架入参请求的切入点示例和scf服务框架出参结果切入点示例,具体如下两个程度段(3)和(4)所示:
(3)
Figure BDA0002676589720000121
(4)
Figure BDA0002676589720000122
该切入器会将访问请求的服务、方法、参数等信息进行动态拼装,然后放入到插件器上下文对象“SCFContext”中,供后续公共核心代理模块及各个插件使用。
也就是说,在业务项目启动时,会先进行工程jar包及class类目录扫描,将所有包含插件注解的服务类放入内存中插件仓库中以备用。同时会扫描所有插件机插件实现类(即实现了DefinedPluginImpl的注解),并放入内存中以备用。之后,创建异常加载插件器的多线程,供后续异步插件执行时使用。再后,通过不同的业务框架,将插件器切入到对应的业务框架中,确保调用业务方法时能正常调用插件器。
完成以上几步,即完成了工程项目的启动操作,后续则是业务执行的流程。
3)在检测到业务调用方发送的业务请求时,首先会经过工程框架的默认过滤器从而调用到公共核心代理处理模中插件器的核心处理模块,该核心处理模块负责匹配及过滤业务方法是否有需要执行的一个或关联执行的多个插件。当匹配到需要执行的插件时,再去判断插件的执行方式是同步执行还是异步执行,如果是同步执行,则按照所述插件的顺序创建并调用插件的执行前(before)逻辑。在执行完插件前before逻辑后,如果调用正常业务逻辑没有被拦截,则采用反射方式调用业务方法来执行所述真正(即正常)的业务逻辑。等待所述正常业务逻辑执行完成后,获取到业务返回结果后,并将所述业务返回结果反馈到业务调用方。当然,也可以根据插件的需要,则按照所述顺序的逆序从所述插件仓库中调用对应插件的执行后逻辑,具体如下所述。其中,公共核心代理模块负责动态调用业务方法的一种过程如下述程序(5)所示:如果是异步执行,则创建相关的插件放入到插件器的异步线程池中进行独立运行,以便于所述异常线程池通过插件器的上下文描述匹配每个插件的执行前逻辑和执行后逻辑,其中,所述上文描述至少包括:服务名称、业务方法名称、参数类型、参数值以及本次调用的sessionid。也就是说,如果是异步执行,则采用统一的异步线程池来管理异步插件,即将插件的执行放入到该异步线程池中进行异步执行,从而达到不影响业务主线程的目的,其一种异步执行的程序段如(6)所示。
(5)
Figure BDA0002676589720000141
(6)
Figure BDA0002676589720000142
4)根据所述插件器的需求,判断是否需要调用正常业务逻辑;如果需要,则采用反射方式调用业务方法调用所述正常业务逻辑;将调用所述插件器的业务逻辑的调用结果反馈给所述业务调用方。如果不需要,则拦截所述调用,将调用异常的调用异常结果反馈给所述业务调用方。
5)在将所述业务返回结果反馈给所述业务调用方前,根据所述插件器的需求,则按照所述顺序的逆序从所述插件仓库中调用所述插件的执行后(after)逻辑;经过插件的执行after逻辑处理后,则将真正的处理结果返回给该业务调用方。需要说明的是,所述插件的执行前逻辑和执行后逻辑的相关关联。至此,一个正常的业务调用及插件器加载执行过程全部完成。
其中,插件仓库,是存储所有插件开发、提交、维护的一个虚拟仓库,每个插件的本质可以理解为”实现了指定接口(DefinedPluginImpl)的注解及注解实现类”,由于需要支持同步和异步两种插件执行方式,因此在定义开发某个新插件的时候,就要根据不同的定位来实现不同的接口,即当需要串行执行时,需实现一个IFPluginAnnotationSerial接口即可,而当插件器加载扫描到该插件的时候就知道该用什么方式来运行它了。
其中,插件仓库的结构可以包括“声明”和“实现”两个模块,其各个模块,结插件仓库对应结构的实现过程如程序段(7)所示。
(7)
Figure BDA0002676589720000161
而插件注解声明方式如程序段(8)所示。
(8)
Figure BDA0002676589720000171
其插件器具体逻辑实现如程序段(9)所示。
Figure BDA0002676589720000181
为了便于理解,下面举例来说明本发明实施例的效果。
比如,实现一个日志打印的插件,该插件实现执行前、执行后两个业务方法。在业务逻辑执行前,打印日志“aaaaaaaa”,而业务逻辑执行后,打印日志“bbbbbbbbb”,具体实现过程如程序段(10)所示:
(10)
Figure BDA0002676589720000182
再比如,一个在方法前后打印日志的demo插件,而业务代码中,只需要在方法上增加注解“@FPluginTimeLogPrint”即可,业务代码无需任何改动。但非插件器实现方式则需要在业务方法内,最开始部分增加一段打印日志“aaaaaaa”的代码,在业务方法返回结果前增加一段打印日志“bbbbbbbbb”的代码,十分的不方便。其实现过程如程序段(11)所示。
(11)
Figure BDA0002676589720000191
再比如,在某方法上增加插件注解,服务启动后,当有方法调用方法时,会在业务方法执行前打印日志“aaaaaaa”,然后执行真正的业务方法。而在业务方法执行后打印日志“bbbbbbbbb”,从而完成业务+插件的整合与正常顺序的执行。其实现过程如程序段(12)所示,其中,
(12)
[08-07 12:46:15,134 INFO][pool-16threod2]log,SystemPrintStream-aaaaaaaa
[08-07 12:46:18,200 INF0][pool-3-thread-5]filter,FPluginResponSeFilter-++++++++AdvPolicyFeesService,countAll(1=1)++++++++woitt
[08-07 12:46:18,201 INFO][pool-17-thread-2]log,SystemPrintStream-bbbbbbbbb|
[08-07 12:46:18,201 INF0][pool-3-thread-5]log,SystemPrintStream-执行所有业务方法之后调用,--remoteIP:127.0.0.1--remotePort:54679
[08-07 12:46:18,213 INFO][New I/O server worker#1-2]tcp,SocketHondler-channel is closed:/127,0.0.1:54679
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
请参阅图3,为本发明实施例提供的一种插件调用装置的结构示意图,具体可以包括如下模块:第一获取模块301,确定模块302,第一调用模块303,第二调用模块304,第二获取模块305和第一发送模块306,其中,
该第一获取模块301,用于在检测到业务调用方发送的业务请求时,获取所述业务请求对应的业务框架的插件器;
该确定模块302,用于确定所述插件器需要执行的插件,所述插件包括一个插件或关联的多个插件,每个插件为实现了指定接口的插件注解和插件注解实现类的插件;
该第一调用模块303,用于在所述确定模块确定所述插件的执行方式为同步执行时,按照所述插件的顺序从插件仓库中调用对应插件的执行前逻辑;
该第二调用模块304,用于在每个所述插件执行完成对应的执行前逻辑后,如果需要调用正常业务逻辑,则采用反射方式调用业务方法来执行正常业务逻辑;
该第二获取模块305,用于获取所述正常业务逻辑执行完成后的业务返回结果;
该第一发送模块306,用于将所述业务返回结果反馈给所述业务调用方。
可选的,在另一实施例中,该实施例在上述实施例的基础上,所述装置还包括:判断模块401、拦截模块402和第二发送模块403,其结构示意如如图4所示。其中,
该判断模块401,用于在每个所述插件的执行前逻辑执行完成后,根据所述插件器的需求,判断是否需要调用正常业务逻辑;
该第二调用模块304,还用于在所述判断模块401判定所述需要调用正常业务逻辑时,采用反射方式调用业务方法来执行所述正常业务逻辑;
该拦截模块402,用于在所述判断模块401判定所述不需要调用正常业务逻辑时,拦截所述调用
该第二发送模块403,用于在所述拦截模块402拦截后,将调用异常结果反馈给所述业务调用方。
可选的,在另一实施例中,该实施例在上述实施例的基础上,所述装置还包括:第三调用模块501,第三发送模块502其结构示意如如图5所示。其中,
第三调用模块501,用于在所述第一发送模块306将所述业务返回结果反馈给所述业务调用方前,根据所述插件器的需求,则按照所述顺序的逆序从所述插件仓库中调用对应插件的执行后逻辑;
第三发送模块502,用于按照所述逆序在每个所述插件执行完成对应的执行后逻辑后,将执行后逻辑完成后得到的结果反馈给所述业务调用方。
可选的,在另一实施例中,该实施例在上述实施例的基础上,所述装置还包可以括:第四发送模块601,其结构示意图如图6所示,其中,
第四发送模块601,用于在所述确定模块302确定的所述插件的执行方式为异步执行时,将所述插件的功能存储到异步线程池中进行独立运行,以便于所述异常线程池通过插件器的上下文数据匹配每个插件的执行前逻辑和执行后逻辑,其中,所述上文数据至少包括:服务名称、业务方法名称、参数类型、参数值以及本次调用的sessionid。
可选的,在另一实施例中,该实施例在上述实施例的基础上,所述装置还包可以括:扫描模块701,标记模块702和第五发送模块703,其结构示意图如图7所示,其中,
扫描模块701,用于在所述第一获取模块获取所述业务请求对应的业务框架的插件器前,若检测到业务工程项目启动时,扫描所述业务工程项目所需的工程代码以及参数类目录;
标记模块702,用于标记所述业务工程项目下所有插件注解的服务类及插件实现类;
第五发送模块703,用于将标记的所述插件注解的服务类和插件实现类发送到插件仓库模块中进行存储。
可选的,在另一实施例中,该实施例在上述实施例的基础上,所述装置还包可以括:创建模块801和切入模块802,其结构示意图如图8所示,其中,
创建模块801,用于为待切入的每个业务工程项目创建插件器;
切入模块802,用于将所述创建模块801创建的所述插件器切入到对应的业务工程项目使用的业务框架中,以便于通过所述业务框架调用业务方法时能正常调用对应的插件器。
可选的,本发明实施例还提供一种插件调用装置,包括:初始化模块901,框架切入模块902,公共核心代理模块903和插件仓库模块904,其结构示意图如图9所示,其中,插件调用装置又可以称为插件器,其中,
初始化模块901,用于在检测到业务工程项目启动时,扫描所述业务工程项目所需的工程代码以及参数类目录,以及标记所述业务工程项目下所有插件注解的服务类及插件实现类,并将标记的所述插件注解的服务类和插件实现类发送到插件仓库模块中进行存储;
框架切入模块902,用于为待切入的每个业务工程项目创建插件器,将创建的所述每个业务工程项目的插件器切入到对应业务工程项目使用的业务框架中,以便于通过所述业务框架调用业务方法时正常调用对应的插件器;
公共核心代理模块903,用于在检测到业务调用方发送的业务请求时,通过所述框架切入模块获取到与所述业务请求对应的所述业务框架的插件器,以及确定所述插件器需要执行的插件,所述插件包括一个插件或关联的多个插件,每个插件为实现了指定接口的插件注解和插件注解实现类的插件,以及在所述插件的执行方式为同步执行时,通过反射方式实现业务类的动态代理,按照所述插件的顺序从所述插件仓库模块中调用对应插件的执行前逻辑,在所述插件执行完成对应的执行前逻辑后,如果需要调用正常业务逻辑,则采用反射调用业务方法来执行所述正常业务逻辑;以及根据所述插件器的需求,则按照所述顺序的逆序从所述插件仓库中调用对应插件的执行后逻辑,在按照所述顺序的逆序执行完所述插件的执行后逻辑后,将执行后逻辑后得到的结果反馈给所述业务调用方;
插件仓库模块904,用于存储所述初始化模块扫描得到的业务工程项目所需的工程代码以及参数类目录,以及标记的所述插件注解的服务类和插件实现类的整体包,并通过插件同步执行实现接口和插件异步执行实现接口为所述公共核心代理模块提供对应的插件。
可选的,在另一实施例中,该实施例在上述实施例的基础上,所述装置还可以包括:异步线程池模块1005,其结构示意图仍参考图10,其中,
异步线程池模块1005,用于存储异步执行的插件,以及根据所述公共核心代理模块的指令进行异步插件的调用,并通过插件器的上下文描述匹配每个插件的执行前逻辑和执行后逻辑,其中,所述上文描述至少包括:服务名称、业务方法名称、参数类型、参数值以及本次调用的sessionid。
可选的,在另一实施例中,该实施例在上述实施例的基础上,所述初始化模块包括:初始化业务类加载模块和插件仓库初始化模块,其中,
所述初始化业务类加载模块,用于在检测到业务工程项目启动时,扫描所述业务工程项目所需的工程代码以及参数类目录;
插件仓库初始化模块;用于标记所述业务工程项目下所有插件注解的服务类及插件实现类,并将标记的所述插件注解的服务类和插件实现类发送到插件仓库模块中进行存储。
可选的,在另一实施例中,该实施例在上述实施例的基础上,所述公共核心代理模块包括:插件器核心处理模块和代理执行模块,其中,
插件器核心处理模块,用于在检测到业务调用方发送的业务请求时,通过所述框架切入模块获取到与所述业务请求对应的所述业务框架的插件器,以及确定所述插件器需要执行的插件,所述插件包括一个插件或关联的多个插件,每个插件为实现了指定接口的插件注解和插件注解实现类的插件;
代理执行模块,用于在所述插件器核心处理模块确定所述插件器需要执行的插件为同步执行时,按照所述插件的顺序从所述插件仓库模块中调用对应插件的执行前逻辑,在所述插件执行完成对应的执行前逻辑后,如果需要调用正常业务逻辑,则采用反射调用业务方法来执行所述正常业务逻辑;根据所述插件器的需求,则按照所述顺序的逆序从所述插件仓库中调用对应插件的执行后逻辑,在按照所述顺序的逆序执行完所述插件的执行后逻辑后,将执行后逻辑后得到的结果反馈给所述业务调用方。
还请参阅11,为本发明实施例提供的一种插件调用装置的应用实例的结构示意图,所述插件处理装置包括:初始化模块111,框架切入模块112,公共核心代理模块113和插件仓库模块114,异步线程池模块115。
其中,该初始化模块111包括:初始化业务类加载模块1101和插件仓库初始化模块1102;
该框架切入模块112以包括:远程通信服务器框架切入器1221、网页架构切入器1122、阿里dubbo远程通信框架切入器1123和开源spring框架切入器1124为例,但在实际应用中,并不限于此,可以包括多个工程项目的业务框架,可以根据需要新增工程项目的业务框架。
该公共核心代理模块113包括:插件器核心处理器3111和代理执行器1132。
该插件仓库模块114包括:基于插件抽象类(类似于通信协议)通过插件同步执行实现接口和插件异步执行实现接口与所述代理执行器连接,所述插件仓库模块用来存储多个带有注解的插件,其中,所述插件以包括下述之一为例:自动化缓存插件,日志丹云插件,调用统计插件,参数验证插件,异常监控处理插件,服务降级插件,超时监控插件,敏感数据监控产检,业务鉴权插件等等。在实际应用中,并不限于此上述。
该异步线程池模块115包括异步执行线程池1151。
可选中,该实施例中,与插件处理装置中的插件器核心处理器3111连接的还可以包括业务方法区116,该业务方法区包括具体的业务方法116,由业务调用方管理,根据需要发送业务请求给插件器的核心处理器
需要说明的是,该装置中,各个模块的功能和作用详见上述实施例中对应模块的功能和作用,在此不再赘述。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
可选的,本发明实施例还提供一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行上述插件调用方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
可选的,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被电子设备的处理器执行上述插件调用方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述的计算机可读存储介质,如只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(RandomAccess Memory,简称RAM)、磁碟或者光盘等。
在示例性实施例中,还提供了一种计算机程序产品,当计算机程序产品中的指令由电子设备的处理器执行时,使得所述电子设备执行上述所示的插件处理方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种插件处理方法、装置、电子设备及存储介质,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (18)

1.一种插件调用方法,其特征在于,包括:
在检测到业务调用方发送的业务请求时,获取所述业务请求对应的业务框架的插件器;
确定所述插件器需要执行的插件,所述插件包括一个插件或关联的多个插件,每个插件为实现了指定接口的插件注解和插件注解实现类的插件;
如果所述插件的执行方式为同步执行,则按照所述插件的顺序从插件仓库中调用对应插件的执行前逻辑;
在所述插件执行完成对应的执行前逻辑后,如果需要调用正常业务逻辑,则采用反射方式调用业务方法来执行正常业务逻辑;
获取所述正常业务逻辑执行完成后的业务返回结果;
将所述业务返回结果反馈给所述业务调用方。
2.根据权利要求1所述的方法,其特征在于,在每个所述插件的执行前逻辑执行完成后,所述方法还包括:
根据所述插件器的需求,判断是否需要调用正常业务逻辑;
如果需要,则执行所述采用反射方式调用业务方法来执行业务逻辑的步骤;
如果不需要,则拦截所述调用,并将调用异常结果反馈给所述业务调用方。
3.根据权利要求1或2所述的方法,其特征在于,在将所述业务返回结果反馈给所述业务调用方前,所述方法还包括:
根据所述插件器的需求,则按照所述顺序的逆序从所述插件仓库中调用对应插件的执行后逻辑;
按照所述逆序在每个所述插件执行完成对应的执行后逻辑后,将执行后逻辑完成后得到的结果反馈给所述业务调用方。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
如果所述插件的执行方式为异步执行,则将所述插件的功能存储到异步线程池中独立运行,以便于所述异常线程池通过插件器的上下文数据匹配每个插件的执行前逻辑和执行后逻辑,其中,所述上文数据至少包括:服务名称、业务方法名称、参数类型、参数值以及本次调用的会话标识sessionid。
5.根据权利要求1至4任一项所述的方法,其特征在于,在获取所述业务请求对应的业务框架的插件器前,所述方法还包括:
在检测到业务工程项目启动时,扫描所述业务工程项目所需的工程代码以及参数类目录;
标记所述业务工程项目下所有插件注解的服务类及插件实现类;
将标记的所述插件注解的服务类和插件实现类发送到插件仓库模块中进行存储。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
为待切入的每个业务工程项目创建插件器;
将创建的所述每个业务工程项目的插件器切入到对应的业务工程项目使用的业务框架中,以便于通过所述业务框架调用业务方法时能正常调用对应的插件器。
7.一种插件调用装置,其特征在于,包括:
第一获取模块,用于在检测到业务调用方发送的业务请求时,获取所述业务请求对应的业务框架的插件器;
确定模块,用于确定所述插件器需要执行的插件,所述插件包括一个插件或关联的多个插件,每个插件为实现了指定接口的插件注解和插件注解实现类的插件;
第一调用模块,用于在所述确定模块确定所述插件的执行方式为同步执行时,按照所述插件的顺序从插件仓库中调用对应插件的执行前逻辑;
第二调用模块,用于在每个所述插件执行完成对应的执行前逻辑后,如果需要调用正常业务逻辑,则采用反射方式调用业务方法来执行正常业务逻辑;
第二获取模块,用于获取所述正常业务逻辑执行完成后的业务返回结果;
第一发送模块,用于将所述业务返回结果反馈给所述业务调用方。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
判断模块,用于在每个所述插件的执行前逻辑执行完成后,根据所述插件器的需求,判断是否需要调用正常业务逻辑;
所述第二调用模块,还用于在所述判断模块判定所述需要调用正常业务逻辑时,采用反射方式调用业务方法来执行所述正常业务逻辑;
拦截模块,用于在所述判断模块判定所述不需要调用正常业务逻辑时,拦截所述调用;
第二发送模块,用于在所述拦截模块拦截后,将调用异常结果反馈给所述业务调用方。
9.根据权利要求7或8所述的装置,其特征在于,所述装置还包括:
第三调用模块,用于在所述第一发送模块将所述业务返回结果反馈给所述业务调用方前,根据所述插件器的需求,则按照所述顺序的逆序从所述插件仓库中调用对应插件的执行后逻辑;
第三发送模块,用于按照所述逆序在每个所述插件执行完成对应的执行后逻辑后,将执行后逻辑完成后得到的结果反馈给所述业务调用方。
10.根据权利要求7所述的装置,其特征在于,所述装置还包括:
第四发送模块,用于在所述确定模块确定的所述插件的执行方式为异步执行时,将所述插件的功能存储到异步线程池中进行独立运行,以便于所述异常线程池通过插件器的上下文数据匹配每个插件的执行前逻辑和执行后逻辑,其中,所述上文数据至少包括:服务名称、业务方法名称、参数类型、参数值以及本次调用的sessionid。
11.根据权利要求7至10任一项所述的装置,其特征在于,所述装置还包括:
扫描模块,用于在所述第一获取模块获取所述业务请求对应的业务框架的插件器前,若检测到业务工程项目启动时,扫描所述业务工程项目所需的工程代码以及参数类目录;
标记模块,用于标记所述业务工程项目下所有插件注解的服务类及插件实现类;
第五发送模块,用于将标记的所述插件注解的服务类和插件实现类发送到插件仓库模块中进行存储。
12.根据权利要求11所述的装置,其特征在于,所述装置还包括:
创建模块,用于为待切入的每个业务工程项目创建插件器;
切入模块,用于将所述创建模块创建的所述插件器切入到对应的业务工程项目使用的业务框架中,以便于通过所述业务框架调用业务方法时能正常调用对应的插件器。
13.一种插件调用装置,其特征在于,包括:
初始化模块,用于在检测到业务工程项目启动时,扫描所述业务工程项目所需的工程代码以及参数类目录,以及标记所述业务工程项目下所有插件注解的服务类及插件实现类,并将标记的所述插件注解的服务类和插件实现类发送到插件仓库模块中进行存储;
框架切入模块,用于为待切入的每个业务工程项目创建插件器,将创建的所述每个业务工程项目的插件器切入到对应业务工程项目使用的业务框架中,以便于通过所述业务框架调用业务方法时正常调用对应的插件器;
公共核心代理模块,用于在检测到业务调用方发送的业务请求时,通过所述框架切入模块获取到与所述业务请求对应的所述业务框架的插件器,以及确定所述插件器需要执行的插件,所述插件包括一个插件或关联的多个插件,每个插件为实现了指定接口的插件注解和插件注解实现类的插件,以及在所述插件的执行方式为同步执行时,按照所述插件的顺序从所述插件仓库模块中调用对应插件的执行前逻辑,在所述插件执行完成对应的执行前逻辑后,如果需要调用正常业务逻辑,则采用反射调用业务方法来执行所述正常业务逻辑;以及根据所述插件器的需求,则按照所述顺序的逆序从所述插件仓库中调用对应插件的执行后逻辑,在按照所述顺序的逆序执行完所述插件的执行后逻辑后,将执行后逻辑后得到的结果反馈给所述业务调用方;
插件仓库模块,用于存储所述初始化模块扫描得到的业务工程项目所需的工程代码以及参数类目录,以及标记的所述插件注解的服务类和插件实现类的整体包,并通过插件同步执行实现接口和插件异步执行实现接口为所述公共核心代理模块提供对应的插件。
14.根据权利要求13所述的装置,其特征在于,所述装置还包括:
异步线程池模块,用于存储异步执行的插件,以及根据所述公共核心代理模块的指令进行异步插件的调用,并通过插件器的上下文描述匹配每个插件的执行前逻辑和执行后逻辑,其中,所述上文描述至少包括:服务名称、业务方法名称、参数类型、参数值以及本次调用的sessionid。
15.根据权利要求13或14所述的装置,其特征在于,所述初始化模块包括:
所述初始化业务类加载模块,用于在检测到业务工程项目启动时,扫描所述业务工程项目所需的工程代码以及参数类目录;
插件仓库初始化模块;用于标记所述业务工程项目下所有插件注解的服务类及插件实现类,并将标记的所述插件注解的服务类和插件实现类发送到插件仓库模块中进行存储。
16.根据权利要求15所述的装置,其特征在于,所述公共核心代理模块包括:
插件器核心处理模块,用于在检测到业务调用方发送的业务请求时,通过所述框架切入模块获取到与所述业务请求对应的所述业务框架的插件器,以及确定所述插件器需要执行的插件,所述插件包括一个插件或关联的多个插件,每个插件为实现了指定接口的插件注解和插件注解实现类的插件;
代理执行模块,用于在所述插件器核心处理模块确定所述插件的执行方式为同步执行时,按所述插件的顺序从所述插件仓库模块中调用对应插件的执行前逻辑,并在执行前逻辑执行完成后,如果需要调用正常业务逻辑,则采用反射方式调用业务方法来执行正常业务逻辑,获取所述正常业务逻辑执行完成后的业务返回结果,以及根据所述插件器的需求,则按照所述顺序的逆序从所述插件仓库中调用对应插件的执行后逻辑,按照所述逆序在每个所述插件执行完成对应的执行后逻辑后,将执行后逻辑后得到的结果反馈给所述业务调用方。
17.一种电子设备,其特征在于,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至7中任一项所述的插件调用方法。
18.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被电子设备的处理器执行时实现如权利要求1至7中任一项所述的插件调用方法。
CN202010949922.2A 2020-09-10 2020-09-10 一种插件调用方法、装置、电子设备及存储介质 Active CN112068902B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010949922.2A CN112068902B (zh) 2020-09-10 2020-09-10 一种插件调用方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010949922.2A CN112068902B (zh) 2020-09-10 2020-09-10 一种插件调用方法、装置、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN112068902A true CN112068902A (zh) 2020-12-11
CN112068902B CN112068902B (zh) 2021-07-30

Family

ID=73663645

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010949922.2A Active CN112068902B (zh) 2020-09-10 2020-09-10 一种插件调用方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN112068902B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113282347A (zh) * 2021-05-24 2021-08-20 挂号网(杭州)科技有限公司 插件运行方法、装置、设备及存储介质
CN113504956A (zh) * 2021-07-19 2021-10-15 苏州浪潮智能科技有限公司 微服务平台下公共功能的调用方法、装置、设备及介质
CN113900741A (zh) * 2021-12-10 2022-01-07 中航金网(北京)电子商务有限公司 基于插件的业务处理方法、装置、计算机设备以及介质
CN114047976A (zh) * 2021-11-18 2022-02-15 上海电气风电集团股份有限公司 插件加载方法、装置、电子设备、存储介质
CN114978940A (zh) * 2022-03-28 2022-08-30 天工信创(广州)信息科技有限公司 链路监控及告警方法、装置、计算机设备和存储介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110258526A1 (en) * 2010-04-20 2011-10-20 International Business Machines Corporation Web content annotation management web browser plug-in
CN103297381A (zh) * 2012-02-22 2013-09-11 阿里巴巴集团控股有限公司 一种基于插件的业务访问方法及其系统
CN106326017A (zh) * 2016-08-17 2017-01-11 广东亿迅科技有限公司 基于Annotation使用的调用链的实现系统
CN106874020A (zh) * 2015-12-10 2017-06-20 五八同城信息技术有限公司 启动插件的方法及装置
CN109614167A (zh) * 2018-12-07 2019-04-12 杭州数澜科技有限公司 一种管理插件的方法和系统
CN110032400A (zh) * 2018-01-09 2019-07-19 武汉斗鱼网络科技有限公司 一种加载插件的方法及电子终端
CN110457013A (zh) * 2019-07-12 2019-11-15 阿里巴巴集团控股有限公司 程序组件配置装置及方法
CN110673890A (zh) * 2019-09-11 2020-01-10 天翼电子商务有限公司 插件调用方法、系统、介质及装置

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110258526A1 (en) * 2010-04-20 2011-10-20 International Business Machines Corporation Web content annotation management web browser plug-in
CN103297381A (zh) * 2012-02-22 2013-09-11 阿里巴巴集团控股有限公司 一种基于插件的业务访问方法及其系统
CN106874020A (zh) * 2015-12-10 2017-06-20 五八同城信息技术有限公司 启动插件的方法及装置
CN106326017A (zh) * 2016-08-17 2017-01-11 广东亿迅科技有限公司 基于Annotation使用的调用链的实现系统
CN110032400A (zh) * 2018-01-09 2019-07-19 武汉斗鱼网络科技有限公司 一种加载插件的方法及电子终端
CN109614167A (zh) * 2018-12-07 2019-04-12 杭州数澜科技有限公司 一种管理插件的方法和系统
CN110457013A (zh) * 2019-07-12 2019-11-15 阿里巴巴集团控股有限公司 程序组件配置装置及方法
CN110673890A (zh) * 2019-09-11 2020-01-10 天翼电子商务有限公司 插件调用方法、系统、介质及装置

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113282347A (zh) * 2021-05-24 2021-08-20 挂号网(杭州)科技有限公司 插件运行方法、装置、设备及存储介质
CN113504956A (zh) * 2021-07-19 2021-10-15 苏州浪潮智能科技有限公司 微服务平台下公共功能的调用方法、装置、设备及介质
CN113504956B (zh) * 2021-07-19 2023-08-11 苏州浪潮智能科技有限公司 微服务平台下公共功能的调用方法、装置、设备及介质
CN114047976A (zh) * 2021-11-18 2022-02-15 上海电气风电集团股份有限公司 插件加载方法、装置、电子设备、存储介质
CN113900741A (zh) * 2021-12-10 2022-01-07 中航金网(北京)电子商务有限公司 基于插件的业务处理方法、装置、计算机设备以及介质
CN114978940A (zh) * 2022-03-28 2022-08-30 天工信创(广州)信息科技有限公司 链路监控及告警方法、装置、计算机设备和存储介质
CN114978940B (zh) * 2022-03-28 2024-03-29 广州鑫景信息科技服务有限公司 链路监控及告警方法、装置、计算机设备和存储介质

Also Published As

Publication number Publication date
CN112068902B (zh) 2021-07-30

Similar Documents

Publication Publication Date Title
CN112068902B (zh) 一种插件调用方法、装置、电子设备及存储介质
CN108958927B (zh) 容器应用的部署方法、装置、计算机设备和存储介质
US20180357154A1 (en) Automatically Running Tests Against WEB APIs Based on Specifications
CN106663002B (zh) Rest服务源代码生成
KR102015673B1 (ko) 테넌트 이동에 걸친 테넌트 데이터의 복구
US8135732B2 (en) System and method for providing network-based services to users with high availability
US10574724B2 (en) Automatic discovery of management nodes and generation of CLI using HA module
US8438418B2 (en) Simplifying automated software maintenance of data centers
CN101276271A (zh) 一种面向切面编程的拦截器系统及方法
US8250226B2 (en) Generating one or more clients for generating one or more synthetic transactions with one or more web service operations
US20100138477A1 (en) Crunching Dynamically Generated Script Files
US20120159423A1 (en) Tenant independent add-on software packages for an enterprise platform as a service product
CN114281263B (zh) 容器集群管理系统的存储资源处理方法、系统和设备
US10891193B2 (en) Application health monitoring and automatic remediation
CN112350978A (zh) 一种业务处理方法、系统、设备及存储介质
CN112346818A (zh) 一种容器应用部署方法、装置、电子设备和存储介质
US10185613B2 (en) Error determination from logs
CN111813385B (zh) 一种基于Web应用的页面插件化方法、装置及设备
CN111381847A (zh) 信息处理方法及设备
US8694596B2 (en) Systems and methods for information brokering in software management
CN112463808A (zh) 目标集群的数据处理方法、装置和服务器
US20110029856A1 (en) Extensible Web Context in Web Containers
CN112860398A (zh) 基于规则引擎的数据处理方法、装置、设备及介质
CN111488230A (zh) 修改日志输出级别的方法、装置、电子设备及存储介质
CN110399188B (zh) 初始化操作支持系统

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