掌桥专利:专业的专利平台
掌桥专利
首页

基于消息队列的应用服务配置热加载方法及相关设备

文献发布时间:2023-06-19 16:04:54



技术领域

本申请涉及热加载技术领域,尤其涉及一种基于消息队列的应用服务配置热加载方法及相关设备。

背景技术

应用服务通过JDBC(Java Database Connectivity,Java数据库连接)方式访问数据库时会建立一个相对应的数据库连接,当数据库的配置信息发生变化时,如用户名、密码或权限等发生变化,为了避免变更的用户使用原始的数据库连接继续访问,应用服务通常需要重启,断开原始的数据库连接,从而更新配置,建立新的数据库连接,但应用服务重启会出现间歇不可用的状态,这会给其他用户访问带来不便,服务体验差。

发明内容

有鉴于此,本申请的目的在于提出一种基于消息队列的应用服务配置热加载方法及相关设备用以解决上述技术问题。

本申请的第一方面,提供了一种基于消息队列的应用服务配置热加载方法,所述应用服务与数据源之间搭建有数据库连接,所述方法包括:获取所述数据源的配置变更信息;将所述配置变更信息储存在消息队列系统中形成消息队列;响应于用户通过所述应用服务访问所述数据源,获取所述消息队列中的所述配置变更信息进行变更判断;响应于所述用户的配置信息发生变更,更新相应的所述数据库连接。

进一步地,所述基于消息队列的应用服务配置热加载方法还包括:响应于所述用户的所述配置信息未发生变更,维持所述数据库连接。

进一步地,所述更新相应的所述数据库连接包括:在所述应用服务在线的状态下,关闭所述用户原始的所述数据库连接,新建所述用户变更的所述数据库连接。

进一步地,所述配置变更信息包括用户名变更、密码变更和用户权限变更,所述配置信息包括用户名、密码和用户权限。

进一步地,所述消息队列系统为Kafka,所述消息队列中的配置变更信息按照变更时间的先后顺序排列。

进一步地,所述数据源包括多个数据库,所述数据库的种类为Impala数据库、Sqlserver数据库、Mysql数据库、Gauss数据库、OceanBase数据库、Oracle数据库和PolarDB数据库中的一个或多个。

进一步地,所述应用服务设有数据库连接池,所述数据库连接池被配置为管理多个所述数据库连接。

进一步地,所述获取所述数据源的配置变更信息,之前包括:设置所述数据库连接的失效时间以及所述配置变更信息在所述消息队列系统中的储存时间,所述失效时间小于所述储存时间。

本申请的第二方面,提供了一种基于消息队列的应用服务配置热加载装置,包括:获取模块,被配置为获取数据源的配置变更信息;储存模块,被配置为将所述配置变更信息储存在消息队列系统中形成消息队列;判断模块,被配置为响应于用户通过应用服务访问所述数据源,获取所述消息队列中的所述配置变更信息进行变更判断;更新模块,被配置为响应于所述用户的配置信息发生变更,更新相应的所述数据库连接。

本申请的第三方面,提供了一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如上第一方面所述的基于消息队列的应用服务配置热加载方法。

本申请的第四方面,提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,其特征在于,所述计算机指令用于使所述计算机执行如上第一方面所述的基于消息队列的应用服务配置热加载方法。

从上面所述可以看出,本申请提供了一种基于消息队列的应用服务配置热加载方法及相关设备,在应用服务与数据源之间设置消息队列,消息队列包含数据源的配置变更信息,当任意用户通过应用服务访问数据源时,可以消费消息队列中的配置变更信息,如果用户的配置信息发生了改变则更新相应的数据库连接,这样对于配置信息变更的用户,既不用重启应用服务,又可以避免使用原始的数据库连接,实现了应用服务配置的热加载,避免用户恶意访问,提高了应用服务的安全性;对于配置信息未变更的用户,可以持续访问数据库,用户体验好,避免应用服务重启带来的不便;该基于消息队列的应用服务配置热加载方法及相关设备,用户体验好,可以保证服务一直在线,在应用服务不停机的情况下,实现实时热加载,避免配置信息变更的用户使用原始的数据库连接访问数据源。

附图说明

为了更清楚地说明本申请或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例的一种基于消息队列的应用服务配置热加载方法的流程示意图;

图2为本申请实施例的一种基于消息队列的应用服务配置热加载方法的原理示意图;

图3为本申请实施例的一种基于消息队列的应用服务配置热加载装置的结构示意图;

图4为本申请实施例的一种电子设备的结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本申请进一步详细说明。

需要说明的是,除非另外定义,本申请实施例使用的技术术语或者科学术语应当为本申请所属领域内具有一般技能的人士所理解的通常意义。本申请实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。

客户端应用服务在面向数据源的连接主要是通过JDBC(Java DatabaseConnectivity,Java数据库连接)的方式,数据源是指应用服务所使用的数据库,JDBC是Java语言中用来规范应用服务如何来访问关系型数据库的应用程序接口,其提供了诸如查询和更新数据库中数据的方法,包括C/S或B/S结构的应用,C/S结构,即Client/Server(客户机/服务器)结构,是常见的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件环境的优势;B/S结构,即Browser/Server(浏览器/服务器)结构,是对C/S结构的一种变化或者改进的结构,在B/S这种结构下,用户界面完全通过WWW浏览器实现。

当应用服务通过JDBC方式访问数据库时会建立一个相对应的数据库连接,在数据库的配置信息发生变化时,如用户名、密码或权限等发生变化,为了避免变更的用户使用原始的数据库连接继续访问,应用服务通常需要重启,来断开原始的数据库连接,更新配置,但应用服务重启会出现间歇不可用的状态,这会给其他用户访问带来不便。

例如为了节约资源和提升效率,应用服务会通过数据库连接池来管理数据库连接,通常会对数据库连接设置失效时间,当超过失效时间用户未通过应用服务访问数据库时,数据库连接池会关闭数据库连接,但如果在失效时间内用户通过应用服务访问数据库,则数据库连接的失效时间将会刷新。

管理员更新数据库的配置信息后,对于配置信息变更的用户,如果超过失效时间后再访问数据库,则需要重新建立新的数据库连接;但如果在失效时间内访问数据库,由于失效时间刷新,则原始的数据库连接依旧有效,对于例如权限失效的用户,就会存在即使数据库的配置信息变更也能够访问数据库的漏洞,会降低安全性,而对于这种情况通常的做法是重启应用服务,更新配置,这样原始的数据库连接均被关闭,重启后用户再次访问会使用新的数据库连接,避免用户恶意访问。

但应用服务重启会使应用服务短暂停机,例如停机10min,使得配置信息未变更的用户在这段时间也不能访问数据库,给用户带来了不便,服务体验差,所以急需一种能够实现应用服务配置热加载的方法,热加载简单来说就是不重启一个项目,使得部分代码更新,在运行时重新加载class(开发环境),不释放内存,不重启服务器。

在实现本申请的过程中发现,可以考虑在应用服务与数据库之间设置消息队列,消息队列保存有配置变更信息,当任意用户访问数据库时可以消费消息队列中的配置变更信息,如果用户的配置信息发生了改变则更新相应的数据库连接,在不重启应用服务的情况下避免配置信息变更的用户使用原始的数据库连接,以解决应用服务重启带来的不便。

以下,通过具体的实施例并结合图1-4来详细说明本申请的技术方案。

本申请的一些实施例中提供了一种基于消息队列的应用服务配置热加载方法,所述应用服务21与数据源22之间搭建有数据库连接,如图1和图2所示,所述方法包括以下步骤:

S1、获取所述数据源22的配置变更信息。

数据源22包括多个数据库,数据库的种类可以为Impala数据库、Sqlserver数据库、Mysql数据库、Gauss(高斯)数据库、OceanBase(奥星贝斯)数据库、Oracle数据库和PolarDB数据库中的一个或多个,具体不做限定。

数据源22的配置变更信息包括用户名变更、密码变更和用户权限变更等,具体不做限定,通常管理员进行数据源22更新后,可以从数据源22获得配置变更信息。

S2、将所述配置变更信息储存在消息队列系统23中形成消息队列。

配置变更信息按照变更时间的先后顺序排列在消息队列系统23中形成消息队列,以便后续应用服务21进行变更判断;所述消息队列系统23可以为Kafka,Kafka是一个分布式、高吞吐量、高扩展性的消息队列系统,可以支持每秒数百万的消息,稳定性和效率都比较高。

S3、响应于用户通过所述应用服务21访问所述数据源22,获取所述消息队列中的所述配置变更信息进行变更判断。

在应用服务21与数据源22之间设置消息队列,消息队列包含数据源22的配置变更信息,当任意用户通过应用服务21访问数据源22时,应用服务21可以消费消息队列中的配置变更信息,进行变更判断,变更判断即判断用户的配置信息是否发生变更,所述配置信息包括用户名、密码和用户权限等,具体不做限定。

S4、响应于所述用户的配置信息发生变更,更新相应的所述数据库连接。

如果用户的配置信息发生了改变则更新相应的数据库连接,这样对于配置信息变更的用户,既不用重启应用服务21,又可以避免使用原始的数据库连接进行访问,实现了应用服务21配置的热加载,避免用户恶意访问,提高了应用服务21的安全性;对于配置信息未变更的用户,可以持续访问数据源22,用户体验好,应用服务21始终在线,避免了应用服务21重启带来的不便。

该基于消息队列的应用服务配置热加载方法,用户体验好,可以保证服务一直在线,在应用服务21不停机的情况下,实现实时热加载,避免配置信息变更的用户使用原始的数据库连接访问数据源22。

在一些实施例中,多个数据库可以通过DMBS(Database Management System,数据库管理系统)进行管理,DMBS是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。

在一些实施例中,应用服务21为JavaApplication,核心框架由springboot搭建,其中集成了tomcat服务器,并引用了MyBatis做持久层框架,用于存储基础操作内容。

在一些实施例中,所述基于消息队列的应用服务配置热加载方法还包括:

S5、响应于所述用户的所述配置信息未发生变更,维持所述数据库连接。

对于配置信息未变更的用户,可以使用原始的数据库连接访问数据源22,应用服务21始终在线,用户体验好。

对于访问的用户进行变更判断,相当于对用户进行了分类,对分类不同的用户分别进行不同的处理,代替了重启应用服务21那样“一刀切”式的处理,这样可以保持应用服务21一直在线,持续提供服务,提高用户体验。

在一些实施例中,所述更新相应的所述数据库连接包括:

S401、在所述应用服务21在线的状态下,关闭所述用户原始的所述数据库连接,新建所述用户变更的所述数据库连接。

关闭配置信息变更的用户的原始数据库连接,这样避免出现该用户使用原始数据库连接持续访问数据源22的情况,避免产生安全漏洞;新建变更数据库连接,这样该用户可以使用变更的数据库连接重新访问数据源22,数据源22可以根据该用户的权限等信息允许该用户访问或拒绝访问。

在一些实施例中,所述应用服务21设有数据库连接池,所述数据库连接池被配置为管理多个所述数据库连接。

数据库连接池用于管理多个数据库连接,可以节约资源和提升效率,数据库连接池可以为Druid,具体不做限定,Druid是一个高效的数据查询系统,适配多种数据库。

在一些实施例中,所述步骤S1之前还包括:

S0、设置所述数据库连接的失效时间以及所述配置变更信息在所述消息队列系统23中的储存时间,所述失效时间小于所述储存时间。

对数据库连接可以设置失效时间,失效时间例如为90s,具体不做限定,这样用户访问数据源22时会存在两种情况,第一种情况当超过失效时间用户未访问数据源22时,数据库连接池会关闭该数据库连接;第二种情况如果在失效时间内用户访问数据源22时,则数据库连接的失效时间刷新。

针对第二种情况通过步骤S1至S4可以避免配置信息变更的用户的原始数据库连接的失效时间持续刷新;进一步地,为了降低消息队列在消息队列系统23中的占用量,可以设置配置变更信息的储存时间,储存时间例如为7d,具体不做限定,删除过期的配置变更信息降低内存;所述储存时间要大于失效时间,这样避免如果配置信息变更的用户在储存时间内未访问数据源22,配置变更信息过期了,但该用户在失效时间之内访问数据源22,会依旧存在使用原始的数据库连接的风险。

该基于消息队列的应用服务配置热加载方法,用户体验好,安全性高,可以保证服务一直在线,在应用服务21不停机的情况下,实现实时热加载。

需要说明的是,上述对本申请的一些实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于上述实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

基于同一发明构思,与上述任意实施例方法相对应的,本申请还提供了另一种基于消息队列的应用服务配置热加载装置,参考图3,包括:

获取模块31,被配置为获取数据源的配置变更信息;

储存模块32,被配置为将所述配置变更信息储存在消息队列系统中形成消息队列;

判断模块33,被配置为响应于用户通过应用服务访问所述数据源,获取所述消息队列中的所述配置变更信息进行变更判断;

更新模块34,被配置为响应于所述用户的配置信息发生变更,更新相应的所述数据库连接。

为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本申请时可以把各模块的功能在同一个或多个软件和/或硬件中实现。

上述实施例的装置用于实现前述任一实施例中相应的基于消息队列的应用服务配置热加载方法,并且具有相应的方法实施例的有益效果,在此不再赘述。

在一些实施例中,应用服务21、数据源22和消息队列系统23分别储存在不同服务器上。

基于同一发明构思,与上述任意实施例方法相对应的,本申请还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上任意一实施例所述的基于消息队列的应用服务配置热加载方法。

图4示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其特征在于处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。

处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。

存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(RandomAccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。

输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其特征在于输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。

通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其特征在于通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。

总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。

需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。

上述实施例的电子设备用于实现前述任一实施例中相应的基于消息队列的应用服务配置热加载方法,并且具有相应的方法实施例的有益效果,在此不再赘述。

基于同一发明构思,与上述任意实施例方法相对应的,本申请还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上任一实施例所述的基于消息队列的应用服务配置热加载方法。

本实施例的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。

上述实施例的存储介质存储的计算机指令用于使所述计算机执行如上任一实施例所述的基于消息队列的应用服务配置热加载方法,并且具有相应的方法实施例的有益效果,在此不再赘述。

所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本申请的范围(包括权利要求)被限于这些例子;在本申请的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本申请实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。

另外,为简化说明和讨论,并且为了不会使本申请实施例难以理解,可以以框图的形式示出装置,以便避免使本申请实施例难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本申请实施例的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节以描述本申请的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本申请实施例。因此,这些描述应被认为是说明性的而不是限制性的。

尽管已经结合了本申请的具体实施例对本申请进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。

本申请实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本申请实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本申请的保护范围之内。

技术分类

06120114691973