本发明涉及图像处理技术领域,具体涉及一种微服务网关插件动态加载方法、一种微服务网关插件动态加载装置、一种微服务网关插件动态加载系统以及一种存储有上述方法的可读存储介质。
背景技术:
随着网络科技的迅速发展,微服务的使用率也越来越高;其中,微服务是一种架构风格,即将单体应用划分为小型的服务单元,而微服务之间使用http的api进行资源访问与操作。在现有的微服务中的客户端和服务器端之间均会设有网关,所有的外部请求都会先经过网关这一层;该网关的作用在微服务中提供统一入口、鉴权校验、动态路由、降低耦合度的功能;而springcloud是一种市面上常用的对微服务架构解决方案的综合套件组件,其中,springcloudgateway是springcloud中的网关,gateway在于提供-种简单而有效的方式来对api进行路由,以及提供一些过滤器功能。
在现有的springcloudgateway中,当用户需要对网关的过滤需求进行调整时,其需要在网关源代码的基础上修改并添加自定义的过滤器类,然后经过编译、打包一系列动作,最后需要通过重启网关服务后才能完成定制需求;故其不支持插件的动态加载和实现热插拔,使得用户不能快速地对网关的过滤需求进行调整,其极大地影响到用户的使用体验。
技术实现要素:
为克服上述缺陷,本发明的目的即在于提供一种可实现热插拔的微服务网关插件动态加载方法、装置、系统以及存储有其方法的可读存储介质。
本发明的目的是通过以下技术方案来实现的:
本发明是一种微服务网关插件动态加载方法,其包括:
对存储管理器进行实时监测,当监测到所述存储管理器中所存储的插件文件发生变更时,获取当前的插件文件;
将当前所缓存的插件实例进行释放,然后对当前的插件文件进行实例化,得到新的插件实例并进行缓存;
将缓存后的新的插件实例适配成插件过滤器;
将所述插件过滤器加入至网关的过滤链中,构建新的过滤链。
在本发明中,所述监测到所述存储管理器中所存储的插件文件发生变更之前包括:
对所述存储管理器中的插件文件进行调整。
在本发明中,所述对所述存储管理器中的插件文件进行调整包括:
对所述存储管理器中的插件文件进行上传、移除、修改。
在本发明中,所述将所述插件过滤器加入至网关的过滤链中,构建新的过滤链包括:
将网关中的内置过滤器和所述插件过滤器按照预定的顺序加入到过滤链中,构建新的过滤链。
在本发明中,所述当监测到所述存储管理器中所存储的插件文件发生变更时,获取当前的插件文件包括:
对存储管理器中所存储的插件文件的定义标识进行读取,并判断该定义标识是否发生变更,若发生变更,则判断该插件文件当前所缓存的插件实例中的插件文件是否相同,若不相同,则获取当前的插件文件。
在本发明中,所述对存储管理器进行实时监测之前包括:
接收客户端的访问请求,当该访问请求与网关配置的路由匹配时,执行对存储管理器进行实时监测。
在本发明中,所述构建新的过滤链之后包括:
按照新的过滤链将所接收到的访问请求进行过滤,并将过滤后的访问请求发送至服务器端中。
基于同样的构思,本发明还提供一种微服务网关插件动态加载装置,其包括:
存储管理模块,所述存储管理模块用于对插件文件进行管理和存储;
监测管理模块,所述监测管理模块与所述存储管理模块相连接,用于对存储管理模块进行实时监测,当监测到所述存储管理模块中所存储的插件文件发生变更时,获取该存储管理模块中当前的插件文件并驱动实例缓存模块和监测管理模块;并将缓存后的新的插件实例适配成插件过滤器,将所述插件过滤器加入至网关的过滤链中,构建新的过滤链;
实例缓存模块,所述实例缓存模块与所述监测管理模块相连接,用于根据所述监测管理模块的驱动将当前所缓存的插件实例进行释放,或将新的插件实例进行缓存;
实例化模块,所述实例化模块分别与实例缓存模块和监测管理模块相连接,用于对监测管理模块所获得的插件文件进行实例化,得到新的插件实例。
基于同样的构思,本发明还提供一种微服务网关插件动态加载系统,其包括:客户端、服务器端、网关;
所述网关设置于所述客户端与服务器端之间,且所述网关中设有如上所述的微服务网关插件动态加载装置。
基于同样的构思,本发明还提供一种计算机可读程序存储介质,其存储有计算机程序指令,当所述计算机程序指令被计算机执行时,使计算机执行如上所述的方法。
在本发明的微服务网关插件动态加载方法中,其实时监测插件文件的变更情况,对更新后的插件文件进行实例化后形成新的插件过滤器,对新的插件过滤器进行读取以动态完成插件的加载,故用户不需要重启网关服务就能对网关过滤的需求进行调整,实现了热插拔的功能,其有效地提高用户的使用体验。
附图说明
为了易于说明,本发明由下述的较佳实施例及附图作详细描述。
图1为本发明微服务网关插件动态加载方法一个实施例的工作流程示意图;
图2为本发明微服务网关插件动态加载方法另一个实施例的工作流程示意图;
图3为本发明微服务网关插件动态加载装置的逻辑结构示意图;
图4为本发明微服务网关插件动态加载系统的逻辑结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“长度”、“宽度”、“厚度”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”、“顺时针”、“逆时针”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个所述特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接。可以是机械连接,也可以是电连接。可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
下面以一个实施例对本发明的一种springcloudgateway网关插件动态加载方法进行具体描述,请参阅图1,其包括:
s101.对存储管理器进行实时监测
对存储管理器进行实时监测;其中,该存储管理器中存储有一个以上的插件文件,该插件文件被打包为jar文件包;在本实施例中其具体为:实时监测存储管理器中的jar文件包是否有发生变更。
s102.获取当前的插件文件
当监测到所述存储管理器中所存储的插件文件发生变更时,获取当前的插件文件;其中,该插件文件发生变更包括:有新的jar文件包上传、jar文件包被删除、jar文件包的内容被更改;用户可以根据其具体的过滤需求,对jar文件包进行调整。
s103.释放当前的插件实例
将当前所缓存的插件实例进行释放,在本实施例中,网关中缓存有上次的插件实例,由于后续步骤中需要生成新的插件实例,故本步骤中需要对当前所缓存的插件实例进行释放。
s104.对新的插件文件进行实例化
对当前的插件文件进行实例化,得到新的插件实例并进行缓存;其中,实例化是指在面向对象的编程中,把用类创建对象的过程称为实例化;其是将一个抽象的概念类,具体到该类实物的过程。
s105.将新的插件实例适配成插件过滤器
将缓存后的新的插件实例适配成插件过滤器,同时,将所有插件过滤器收集起来,供构建过滤器链时使用;
s106.构建新的过滤链
将所述插件过滤器加入至网关的过滤链中,构建新的过滤链;故网关可在不重启的情况下根据其新的过滤链执行过滤请求。
下面以另一个实施例对本发明的一种springcloudgateway网关插件动态加载方法进行具体描述,请参阅图2,其包括:
s201.接收客户端的访问请求
接收客户端的访问请求,当该访问请求与网关配置的路由匹配时,执行对存储管理器进行实时监测。
s202.对插件文件进行调整
对所述存储管理器中的插件文件进行调整;具体地,对所述存储管理器中的插件文件进行上传、移除、修改。
s203.对存储管理器进行实时监测
对存储管理器进行实时监测;其中,该存储管理器中存储有一个以上的插件文件,该插件文件被打包为jar文件包,且该插件文件中设有定义标识;在本实施例中其具体为:实时监测存储管理器中的jar文件包是否有发生变更。
s204.获取当前的插件文件
对存储管理器中所存储的插件文件的定义标识进行读取,并判断该定义标识是否发生变更,若发生变更,则判断该插件文件当前所缓存的插件实例中的插件文件是否相同,若不相同,则获取当前的插件文件;在本实施例中,该定义标识用于判断插件文件发生变更是否变更,当定义标识发生变更后,判断插件文件的内容是否相同,若相同,则直接获取当前已经缓存的插件实例,其有效避免相同内容的插件频繁初始化问题;其中,该插件文件发生变更包括:有新的jar文件包上传、jar文件包被删除、jar文件包的内容被更改;用户可以根据其具体的过滤需求,对jar文件包进行调整。
s205.释放当前的插件实例
将当前所缓存的插件实例进行释放,在本实施例中,网关中缓存有上次的插件实例,由于后续步骤中需要生成新的插件实例,故本步骤中需要对当前所缓存的插件实例进行释放。
s206.对新的插件文件进行实例化
对当前的插件文件进行实例化,得到新的插件实例并进行缓存;其中,实例化是指在面向对象的编程中,把用类创建对象的过程称为实例化;其是将一个抽象的概念类,具体到该类实物的过程。
s207.将新的插件实例适配成插件过滤器
将缓存后的新的插件实例适配成插件过滤器,同时,将所有插件过滤器收集起来,供构建过滤器链时使用;
s208.构建新的过滤链
将网关中的内置过滤器和所述插件过滤器按照其排序号从小到大排序,然后加入到过滤链中,构建新的过滤链;其中,该内置过滤器为网关中预先设置的过滤器,在本实施例中,通过将内置过滤器和插件过滤器进行整合,得到新的过滤链。
s209.按照新的过滤链将访问请求进行过滤
按照新的过滤链将所接收到的访问请求进行过滤,并将过滤后的访问请求发送至服务器端中。
本发明包括一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的步骤。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
以上可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、rf等等,或者上述的任意合适的组合。
下面以一个实施例对本发明的一种springcloudgateway网关插件动态加载装置进行具体描述,请参阅图3,其包括:
存储管理模块plugindefinitionstore,所述存储管理模块用于对插件文件进行管理和存储;其具体包括:包括插件文件的上传、移除、修改和读取,其中,该插件文件为jar文件包,用户可以根据其具体的过滤需求,对jar文件包进行调整。
监测管理模块pluginloader,所述监测管理模块与所述存储管理模块相连接,用于对存储管理模块进行实时监测,当监测到所述存储管理模块中所存储的插件文件发生变更时,如:有新的插件文件上传、现有的插件文件被移除、现有的插件文件被修改等;则获取该存储管理模块中当前的插件文件并驱动实例缓存模块和监测管理模块;并将缓存后的新的插件实例适配成插件过滤器,将所述插件过滤器加入至网关的过滤链中,构建新的过滤链;故网关可在不重启的情况下根据其新的过滤链执行过滤请求。
实例缓存模块pluginclassloadermanager,所述实例缓存模块与所述监测管理模块相连接,用于根据所述监测管理模块的驱动将当前所缓存的插件实例进行释放,或将新的插件实例进行缓存。
实例化模块pluginclassloader,所述实例化模块分别与实例缓存模块和监测管理模块相连接,用于对监测管理模块所获得的插件文件进行实例化,得到新的插件实例;其中,实例化是指在面向对象的编程中,把用类创建对象的过程称为实例化;其是将一个抽象的概念类,具体到该类实物的过程。
下面以一个实施例对本发明的一种springcloudgateway网关插件动态加载系统进行具体描述,请参阅图4,其包括:
客户端、服务器端、网关;其中,该网关为springcloudgateway;
所述网关设置于所述客户端与服务器端之间,且所述网关中设有如上所述的微服务网关插件动态加载装置。其具体的过程为:客户端发起请求,且当发起的请求与配置的路由匹配的时候,插件动态加载装置就会收集内置过滤器、插件过滤器,并重新构建与执行过滤链;使得客户端所发起的请求经过过滤链的过滤后进入至服务器端,以执行相应的操作。
在本说明书的描述中,参考术语“一个实施方式”、“一些实施方式”、“示意性实施方式”、“示例”、“具体示例”、或“一些示例”等的描述意指结合实施方式或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施方式或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施方式或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施方式或示例中以合适的方式结合。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。