一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

微服务热部署方法、系统、电子设备和存储介质与流程

2023-02-01 21:29:34 来源:中国专利 TAG:


1.本发明涉及微服务技术领域,尤其涉及一种基于springboot的微服务热部署方法、系统、电子设备和存储介质。


背景技术:

2.随着微服务架构的兴起,传统的osgi技术模块化单体架构逐渐被抛弃,以springboot开发微服务应用技术在业内越来越广泛,微服务虽然可以通过合理划分服务边界来实现局部服务更新,但仍然无法满足某些业务场景下需要热部署的需求,如在不停机的情况下,实现缺陷修复、新功能上线。
3.业内目前一般更新部署应用的步骤为:先将旧的应用停止,并且备份,然后上传新的应用,更新配置等,然后启动新的应用。对于需要频繁更新应用当中部分接口服务的系统来说,会有几个问题:
4.1.应用文件的版本不好管理,新旧版本文件内容的差别可能只是多或者少些jar包,但更新一个接口就会导致产生一个应用包文件,备份占用太多的空间,并且管理起来也变得混乱。
5.2.这种更新必须停止服务,再启动新的服务,频繁停机更新部署是会严重影响系统的运行,绝大部分企业都有固定的停机维护更新时间,也根本不允许这样频繁更新。
6.业内有如servicemix框架支持热部署应用,但其已已经停更多年了,而且无法兼容现在的springboot应用,并且其遵循的jbi规范已不适应微服务架构。


技术实现要素:

7.本发明提供了微服务热部署方法、系统、电子设备和存储介质,能够实现在不停机的状态下更新服务。
8.本发明的技术方案为:
9.第一方面,本技术实施例提供了一种微服务热部署方法,其特征在于,所述方法包括:
10.获取应用包,所述应用包至少包括满足springboot框架服务的配置文件信息、内容符合springboot标准并约定好目录规则的应用驱动文件及可标识配置内容的应用元数据;
11.保存所述应用包到存储装置,并装载存储装置中的应用包到指定文件目录;
12.创建应用包的类加载器,并将该类加载器装载到主应用程序所在的类加载器集合中,并设置其类加载器的类型;
13.设置应用驱动文件的类加载器为所述创建应用包的类加载器创建的类加载器,使用所述类加载器装载所述应用驱动文件;
14.使用springboot初始化应用包获得springboot容器,将springboot容器与应用元数据建立关联,将建立关联的对照表保存在程序上下文中;
15.刷新springboot容器内的服务资源引用,按照spring对外发布服务的规则,生成服务的定义,对外发布。
16.优选地,所述满足springboot框架服务的配置文件信息至少包括springboot框架的服务地址、名称、参数、返回数据。
17.优选地,所述应用包通过maven、ant或gradle构建工具构建,并且构建出的程序包为jar包。
18.优选地,创建应用包的类加载器的具体方法包括:
19.创建urlclassloader实例;
20.将应用包添加到实例的url集合中,设置其类加载器为启动类加载器。
21.优选地,所述应用驱动文件为springcontext.xml格式的应用驱动文件。
22.优选地,所述应用元数据信息至少包括应用名称、应用标识、应用版本、服务信息和配置信息中的一种,其中,所述服务信息至少包括对外的服务数量、服务描述和服务类型中的一种,所述配置信息至少包括配置文件、数据源、系统参数、依赖服务信息中的一种。
23.优选地,在将所述应用包保存到存储装置之前,还需要上传所述应用包,所述应用包在上传后,还需要对所述应用包进行效验,效验的内容至少包括应用驱动文件是否存在、应用元数据是否存在,且应用标识是否被使用、配置文件信息中要求的配置项是否满足中的一项。
24.进一步地,所述方法还包括所述应用驱动文件的停止应用的方法,具体包括:
25.通过所述应用标识与spring容器的关系,获取spring容器;
26.使用springboot销毁spring容器;
27.关闭容器使用的类加载器;
28.刷新springboot容器内的服务资源引用,将对外声明的服务路径与应用包的执行逻辑关系解除。
29.进一步地,所述方法还包括所述应用驱动文件的卸载方法,具体包括在执行完所述停止应用的步骤后,再删除储存装置中的应用包。
30.第二方面,本技术实施例还提供了一种微服务热部署系统,包括:
31.应用包获取单元,用于获取应用包,所述应用包至少包括满足springboot框架服务的配置文件信息、内容符合springboot标准并约定好目录规则的应用驱动文件及可标识配置内容的应用元数据;
32.应用包装载单元,保存所述应用包到存储装置,并装载存储装置中的应用包到指定文件目录;
33.类加载器创建单元,用于创建应用包的类加载器,并将该类加载器装载到主应用程序所在的类加载器集合中,并设置其类加载器的类型;
34.应用驱动文件装载单元,设置应用驱动文件类加载器为所述创建应用包的类加载器创建的类加载器,使用所述类加载器装载所述应用驱动文件;
35.应用元数据关联建立单元,在使用springboot初始化应用包后获得的springboot容器与应用元数据建立关联,将建立关联的对照表保存在程序上下文中;
36.服务资源发布单元,刷新springboot容器内的服务资源引用,按照spring对外发布服务的规则,生成服务的定义,对外发布。
37.第三方面,本技术实施例还提供了一种计算机存储介质,所述计算机存储介质存储有多条指令,所述指令适于有处理器加载并执行上述方法步骤。
38.第四方面,本技术实施例还提供了一种电子设备,可包括处理器和存储器,所述存储器存储有计算机程序,所述计算机程序适于由所述处理器加载并执行上述方法步骤。
39.本技术一些实施例提供的技术方案带来的有益效果至少包括:通过获取应用包,并保存所述应用包到存储装置再装载存储装置中的应用包到指定文件目录、创建应用包的类加载器,并将该类加载器装载到主应用程序所在的类加载器集合中,同时,设置应用驱动文件的类加载器为所述创建应用包的类加载器创建的类加载器,使用所述类加载器装载所述应用驱动文件;最后使用spring boot初始化应用包,将初始化后的spring boot容器与应用元数据建立关联,将建立关联的对照表保存在程序上下文中,通过刷新springboot容器内的服务资源引用,按照spring对外发布服务的规则,生成服务的定义,对外发布,提供给外部访问,进而在软件升级或更新配置等应用时,可以实现不停机发布,注销,更新服务,从而避免停机更新导致整个应用服务处于不可用状态。
附图说明
40.为了更清楚地说明本发明实施例,下面将对实施例或现有技术描述中所需要使用的附图做简单介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
41.图1为本发明实施例的方法主要步骤流程图;
42.图2为本发明实施例的方法的详细步骤流程图;
43.图3为本发明实施例的系统框图;
44.图4为本发明实施例的装置结构框图。
45.以下结合附图对本发明的具体实施方式作进一步详细地说明。
具体实施方式
46.下面结合附图对本发明进行详细描述,在详述本发明实施例时,为便于说明,表示器件结构的附图会不依一般比例做局部放大,而且所述示意图只是示例,其在此不应限制本发明保护的范围。需要说明的是,附图采用简化的形式且均使用非精准的比例,仅用以方便、清晰地辅助说明本发明实施例的目的。
47.需要说明的是,本技术提供的一种微服务热部署方法一般由计算机设备执行,相应的,兼容不同设备通讯交互的系统一般设置于计算机设备中。
48.本技术的计算机设备上可以安装有各种通讯客户端应用,例如:视频录制应用、视频播放应用、语音交互应用、搜索类应用、即时通讯工具、邮箱客户端、社交平台软件等。
49.计算机设备可以是硬件,也可以是软件。当计算机设备为硬件时,可以是具有显示屏的各种计算机设备,包括但不限于智能手机、平板电脑、膝上型便携式计算机和台式计算机等等。当计算机设备为软件时,可以是安装上述所列举的计算机设备中。其可以实现呈多个软件或软件模块(例如:用来提供分布式服务),也可以实现成单个软件或软件模块,在此不作具体限定。
50.当计算机设备为硬件时,其上还可以安装有显示设备和摄像头,显示设备显示可以是各种能实现显示功能的设备,摄像头用于采集视频流;例如:显示设备可以是阴极射线管显示器(cathode ray tube display,简称 cr)、发光二极管显示器(light-emitting diode display,简称led)、电子墨水屏、液晶显示屏(liquid crystal display,简称lcd)、等离子显示面板(plasma display panel,简称pdp)等。用户可以利用计算机设备上的显示设备,来查看显示的文字、图片、视频等信息。
51.为了便于理解,下面列举一个简单的示例来说明本发明实施例的应用场景。
52.主应用程序中已经部署了a应用包,其中对外发布了a1、a2、a3,3 个http服务供甲系统访问,上线运行若干日之后,发现原有的3个服务不够用,需要额外增加2个服务提供给乙系统访问,此时按照本实施例方法,只需再开发一个b应用包,内含额外需要的2个服务,开发测试完毕之后,安装到主机系统上并启动,新开发的应用包的服务即上线成功。
53.现有技术中一般的做法需要整个主应用程序经过重新打包,重启才能将新增的服务上线使用,在此过程中,已经上线的a1、a2、a3服务也会被停止无法访问,而且更新服务越频繁,受到的影响越大,而本发明实施例提供的技术方案可以在主应用程序不停机也能更新服务。
54.具体的,参看图1和图2,微服务热部署方法,包括步骤:
55.s1,获取应用包,所述应用包至少包括满足spring boot框架服务的配置文件信息、内容符合spring boot标准并约定好目录规则的应用驱动文件及可标识配置内容的应用元数据等资源信息;
56.在本步骤中,应用包中根据需要包括满足spring boot框架服务的配置文件信息,配置文件信息可以包括spring boot框架的服务地址、名称、参数、返回数据等信息,这些配置文件信息主要用于提供给外部访问时的搜索使用,例如可以根据这些信息去对外发布这个服务作为http服务提供给外部使用。
57.在一些实施例中,应用驱动文件的格式一般为springcontext.xml,即文件内容为spring boot标准springcontext定义,并约定好目录规则。约定好目录规则的目的是方便在接下来的装载好应用包后,主应用程序根据确定的规则去读取这些文件。
58.在一些实施例中,应用包中还包括定义应用的启动、停止、卸载事件,当监听到应用的启动、停止或卸载事件等,可以根据需要在事件触发后做相应的业务处理。
59.在一些实施例中,所述应用元数据,主要包含以下要素:
60.应用名称:在前端显示的有意义的中(英)文名称;
61.应用标识:全局惟一标识,能够确定服务的身份证之类的唯一值,在整个应用程序里唯一;
62.应用版本:符合业界或企业内部的版本号定义;
63.服务信息:对外服务的基本信息,如服务数量、服务描述、服务类型等;
64.配置信息:应用需要的配置项,如配置文件、数据源、系统参数、依赖服务等。
65.在上述资源信息确定好后,即可根据需要的逻辑编写并获取相应的应用源代码。
66.在一些实施例中,通过标准的构建工具,例如maven、ant、gradle等将应用源代码,构建成应用包,构建应用包需将“应用驱动文件”放置于约定好的规则目录下,以便后续步骤加载。构建出的应用包为标准的jar包。
67.s2,保存所述应用包到存储装置(相当于图2中部署应用中的保存到存储装置),并装载存储装置中的应用包到指定文件目录(相当于图2中部署应用中的最后一步:将应用包写入容器指定路径,注册应用)。
68.在应用包存储之前,需要上传所述应用包,可通过主应用程序所在主机的安装界面上传开发的应用包。在上传应用包后,还需要对所述应用包进行效验,校验内容主要包含单不限于:
69.(1)应用驱动文件是否存在。
70.(2)应用元数据是否存在,且应用标识未被使用。
71.(3)配置信息中要求的配置项是否满足。
72.验证完毕后,保存应用包到存储装置中,并装载存储装置中的应用包到指定文件目录。
73.s3,创建应用包的类加载器,并将该类加载器装载到主应用程序所在的类加载器集合中,并设置其类加载器的类型;
74.为了便于理解,在本步骤中,创建应用包的类加载器的具体方法包括:
75.创建urlclassloader实例;
76.将应用包添加到实例的url集合中,设置其类加载器为父类加载器,类型为启动类加载器,供给后面的spring容器。
77.本步骤中,根据装载的这些实例,将应用装载到主应用程序所在的虚拟机中,比如创建驱动文件里声明的java bean实例,加载需要的配置文件信息等,虚拟机可以读取其中声明的服务地址等信息,以便外部访问。
78.在创建应用包的类加载器后还需要查找应用包内的spring bean相关资源并进行配置,配置好的文件符合xml标准。参看图2中启动应用单元中的“查找应用内的spring bean配置xml”。
79.s4,设置应用驱动文件类加载器为所述创建应用包的类加载器创建的类加载器,使用所述类加载器装载所述应用驱动文件;
80.s5,使用spring boot初始化应用包获得初始化后的spring boot容器,将spring boot容器与应用元数据建立关联,将建立关联的对照表保存在程序上下文中;
81.上述两个步骤的目的是创建程序上下文,参看图2中启动应用单元中的“指定类加载器为之前创建的类加载器,创建xmlapplicationcontext”。此处的xmlapplicationcontext理解为程序上下文,创建成功后,上述对照表即保存在了程序的上下文中。
82.s6,刷新spring boot容器内的服务资源引用,按照spring对外发布服务的规则,生成服务的定义,对外发布。
83.在本步骤中,执行应用启动事件,根据所述配置文件信息刷新springboot容器内的服务资源引用,将对外声明的服务路径与应用包的执行逻辑建立关联。按照spring对外发布服务的规则,生成服务的定义,对外发布。
84.按照spring对外发布服务的规则,生成服务的定义,对外发布,外部通过访问这些地址来查找对应的服务定义,然后执行相应的服务操作。
85.另外,还需要说明的是,在一些实施例中,还可以将应用包中的“应用元数据”注册
到当前应用中,用于展示和后续的可视化操作。
86.在一些实施例中,微服务热部署方法还包括停止应用的方法,具体包括:
87.通过通过程序上下文中保存的“应用标识与spring容器”关系,得到spring容器;
88.执行应用停止事件;
89.使用springboot销毁spring容器;
90.关闭容器使用的类加载器classloader;
91.刷新springboot容器内的服务资源引用,将对外声明的服务路径与应用包的执行逻辑关系解除。
92.在一些实施例中,微服务热部署方法还包括卸载应用的方法,具体包括在执行完停止方法后,再删除储存装置中的应用包。
93.综上,通过本实施例的微服务热部署方法不仅可以达到不停机也能更新服务的目标,还可以动态生成服务说明文档,服务发布或者停止之后更新服务列表。
94.第二方面,如图3所示,本技术实施例还提供了微服务热部署系统,所述系统包括:
95.应用包获取单元,用于获取应用包,所述应用包至少包括满足springboot框架服务的配置文件信息、内容符合springboot标准并约定好目录规则的应用驱动文件及可标识配置内容的应用元数据;
96.应用包装载单元,保存所述应用包到存储装置,并装载存储装置中的应用包到指定文件目录;
97.类加载器创建单元,用于创建应用包的类加载器,并将该类加载器装载到主应用程序所在的类加载器集合中,并设置其类加载器的类型;
98.应用驱动文件装载单元,设置应用驱动文件类加载器为所述创建应用包的类加载器创建的类加载器,使用所述类加载器装载所述应用驱动文件;
99.应用元数据关联建立单元,在使用springboot初始化应用包后后获得的springboot容器与应用元数据建立关联,将建立关联的对照表保存在程序上下文中;
100.服务资源发布单元,刷新springboot容器内的服务资源引用,按照spring对外发布服务的规则,生成服务的定义,对外发布。
101.需要说明的是,上述实施例提供的系统在执行上述方法时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成上述的全部或者部分功能。另外,上述实施例提供的系统与方法实施例属于同一构思,其体现实现过程详见方法实施例,这里不再赘述。
102.上述本技术实施例序号仅仅为了描述,不代表实施例的优劣。
103.本技术实施例还提供了一种计算机存储介质,所述计算机存储介质存储有多条指令,所述指令适于有处理器加载并执行上述微服务热部署的方法步骤。
104.具体执行过程可以参见图1所示实施例的具体说明,在此不进行赘述。
105.本技术实施例还提供了一种电子设备,包括处理器和存储器,所述存储器存储有计算机程序,所述计算机程序适于由所述处理器加载并执行上述微服务热部署的方法。
106.请参见图4,为本技术实施例提供了微服务热部署装置的主要硬件结构示意图。如图4所示,
107.微服务热部署装置300可以包括:至少一个处理器301,至少一个网络接口304,用户接口303,存储器305,至少一个通讯总线302。
108.其中,通讯总线302用于实现这些组件之间的连接通讯。
109.其中,用户接口303可以包括触摸屏和摄像头(camera)。
110.其中,网络接口304可选的可以包括标准的有线接口、无线接口(如 wi-fi接口)。
111.其中,处理器301可以包括一个或者多个处理核心。处理器301利用各种接口和线路连接整个多租户模式数据采集系统300内的各个部分,通过运行或执行存储在存储器305内的指令、程序、代码集或指令集,以及调用存储在存储器305内的数据,执行多租户模式数据采集系统300的各种功能和处理数据。可选的,处理器30 1可以采用数字信号处理(digitalsignal processing,dsp)、现场可编程门阵列 (field-programmable gate array,fpga)、可编程逻辑阵列 (programmable logic array,pla)中的至少一种硬件形式来实现。处理器301可集成中央处理器(central processing unit,cpu)、图像处理器 (graphics processing unit,gpu)和调制解调器等中的一种或几种的组合。其中,cpu主要处理操作系统、用户界面和应用程序等;gpu用于负责显示屏所需要显示的内容的渲染和绘制;调制解调器用于处理无线通讯。可以理解的是,上述调制解调器也可以不集成到处理器301中,单独通过一块芯片进行实现。
112.其中,存储器305可以包括随机存储器(random access memory, ram),也可以包括只读存储器(read-only memory)。可选的,该存储器 305包括非瞬时性计算机可读介质(non-transitory computer-readablestorage medium)。存储器305可用于存储指令、程序、代码、代码集或指令集。存储器305可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现上述各个方法实施例的指令等;存储数据区可存储上面各个方法实施例中涉及到的数据等。存储器305可选的还可以是至少一个位于远离前述处理器301的存储装置。作为一种计算机存储介质的存储器305中可以包括操作系统、网络通讯模块、用户接口模块以及应用程序。在图4所示的系统300中,用户接口303主要用于为用户提供输入的接口,获取用户输入的数据;而处理器301可以用于调用存储器 305中存储的应用程序,并具体执行如图1所示的方法,具体过程可参照图 1所示,此处不再赘述。
113.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可随主应用程序存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体或随机存储记忆体等。
114.对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献