CN115412603B - 一种消息中间件的消息客户端模块的高可用的方法及装置 - Google Patents
一种消息中间件的消息客户端模块的高可用的方法及装置 Download PDFInfo
- Publication number
- CN115412603B CN115412603B CN202211358961.0A CN202211358961A CN115412603B CN 115412603 B CN115412603 B CN 115412603B CN 202211358961 A CN202211358961 A CN 202211358961A CN 115412603 B CN115412603 B CN 115412603B
- Authority
- CN
- China
- Prior art keywords
- message
- client
- module
- instance
- state information
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
- H04L67/143—Termination or inactivation of sessions, e.g. event-controlled end of session
- H04L67/145—Termination or inactivation of sessions, e.g. event-controlled end of session avoiding end of session, e.g. keep-alive, heartbeats, resumption message or wake-up for inactive or interrupted session
Abstract
本发明公开了一种消息中间件的消息客户端模块的高可用的方法及装置,所述方法包括:消息服务端模块监测各个消息客户端模块的实例与所述消息服务端模块的连接状态;对于失去连接的消息客户端模块的实例,所述消息服务端模块清除客户端状态信息总表中与所述失去连接的消息客户端模块的实例对应的客户端状态信息表中的信息;每个与所述失去连接的消息客户端模块的实例对应的应用程序进程,均通过消息客户端模块周期性地自动重连所述消息服务端模块,连接成功后,将所述消息客户端模块的实例对应的当前的客户端状态信息表发送给所述消息服务端模块;所述消息服务端模块更新所述客户端状态信息总表。本发明的方法,能够提升应用程序的高可用性。
Description
技术领域
本发明涉及软件开发领域,具体涉及一种消息中间件的消息客户端模块的高可用的方法及装置。
背景技术
消息中间件是基于队列与消息传递技术,在网络环境中为应用系统提供同步或异步、可靠的消息传输的支撑性软件系统,消息中间件一般用来为跨语言、跨平台、跨计算机的应用程序之间提供信息集成的松耦合解决方案。
消息中间件基于C/S模式运行,消息中间件包括消息服务端模块(也称为生产者)及消息客户端模块(也称为消费者)。其中,消息服务端模块独立部署,可以形成集群以支持大规模消息并发,消息客户端模块以API接口的形态提供给应用程序,API接口一般为连接、会话、队列、主题四个方面的API接口,支持C、Java等常见语言,为上层应用程序提供收发消息的能力。
消息收发一般有队列和主题两种模式,队列模式的特点是每个消息仅仅被消费一次,而主题模式的特点是每个消息可以被消费多次。两种模式都很常用,各有其适用场景。
队列和主题两种模式消息的发送都可以通过同步、异步和投递的方式进行,例如,分别提供“消息已被消息服务端模块处理”、“消息到达消息服务端模块”、“消息到达消息客户端模块缓冲区”语义。
队列模式的消息接收包括主动取和回调取两种方式,主题模式的消息接收首先要对消息进行订阅,只有订阅了某个主题的消息客户端模块才有可能收到主题消息,订阅分为持久订阅和非持久订阅两种,前者在消息客户端模块对应的进程结束后依然有效,后者在消息客户端模块对应进程结束后失效。对主题消息订阅后即可进行主题消息的接收,与队列消息一样,主题消息的接收也包括主动取和回调取两种方式。
消息客户端模块的高可用问题是指消息服务端模块失联又恢复后(可能由于网络、服务端主机或者服务程序的故障引起),消息客户端模块往往需要重新启动,重建和消息服务端模块的连接、会话与运行状态,以确保消息客户端模块和消息服务端模块能恢复正常消息收发的能力,消息客户端模块的重启会导致消息客户端应用程序的重启,这样会给应用系统的使用和运维带来负担。
消息中间件的运行依赖主机、网络和操作系统,通常在消息服务端模块对消息客户端模块的状态进行缓存(例如,通过本地内存、分布式缓存、数据库、文件等方式进行缓存)和管理,以确保维持消息客户端模块的“连接-建立会话-订阅消息-收发消息-退订消息-结束会话-断开连接”的使用流程。当偶发的主机断电、网络断开、消息客户端模块或消息服务端模块软件崩溃、操作系统崩溃等异常情况发生时,消息服务端模块和消息客户端模块会失去联系,此时,消息服务端模块(如果还在运行)对消息客户端模块的状态往往采用以下三种方式之一进行处理。
(1)消息服务端模块立即丢弃消息客户端模块的状态,通常消息服务端模块会直接丢弃掉存储于消息服务端模块中的消息客户端模块的状态信息,如果此时消息客户端模块确实崩溃了,这种处理方式是恰当的,因为这个状态已经没有作用了。但是如果此时发生的是网络断开事件,将来网络环境恢复后,消息客户端模块就无法再与消息服务端模块继续基于已经建立的状态进行通信,可能需要重启消息客户端模块以重建这个状态,可见此时消息客户端模块的高可用问题并没有得到彻底解决。
(2)消息服务端模块延迟丢弃消息客户端模块的状态,消息服务端模块持续缓存消息客户端模块的状态一段时间(例如2分钟)后,丢弃消息客户端模块的状态。如果在这个持续缓存的时间段内,失联的消息客户端模块和消息服务端模块重新取得联系,则消息服务端模块缓存的消息客户端模块的状态立即生效双方马上可以基于这个状态进行通信;否则,在这个持续缓存的时间段内,如果消息客户端模块和消息服务端模块没有重新取得联系,则消息服务端模块丢弃消息客户端模块的状态。但是由于失联的时间很难预测,可能出现的情况是,这个持续缓存的时间段过去后,失联的消息客户端模块才与消息服务端模块重新取得联系,但是此时消息客户端模块的状态已经被消息服务端丢弃,可能需要重启消息客户端模块以在消息服务端模块重建这个状态,所以此时消息客户端模块的高可用问题并没有得到彻底解决。
(3)消息服务端模块长期存储消息客户端模块状态,只要失联的消息客户端模块和消息服务端模块重新取得联系,消息服务端模块缓存的消息客户端模块状态立即生效,双方马上可以基于这个状态进行通信。但是如果消息客户端模块已经崩溃或者结束运行了,消息服务端模块的这个状态就会一直缓存下去,随着消息服务端模块的持续运行会出现很多无用的垃圾状态,占据着宝贵的内存和缓存资源,会给消息服务端模块的高可用带来问题,反过来也会降低消息客户端模块的高可用性。
也就是说,作为有状态服务,消息中间件的消息客户端模块的状态一直由消息服务端模块缓存和管理,当消息客户端模块和消息服务端模块失联时,消息服务端模块由于无法判断失联的真实原因是消息客户端模块自身的原因还是主机崩溃、或网络故障的原因,而采取的丢弃、延迟丢弃和永不丢弃等三种方式之一并不能够确保消息客户端模块在诸多失联原因下的高可用性,造成消息客户端模块往往需要重启,为应用系统的使用和运维带来很多不便。
发明内容
有鉴于此,本发明提供了一种消息中间件的消息客户端模块的高可用的方法及装置,能够解决消息客户端模块的高可用性的技术问题。
为了解决上述技术问题,本发明是这样实现的。
一种消息中间件的消息客户端模块的高可用的方法,所述消息中间件包括消息服务端模块及一个或多个消息客户端模块;每个所述消息客户端模块部署于一个客户端,且每个客户端能够运行多个应用程序,各应用程序运行时,应用程序进程引用一个消息客户端模块的实例,所述消息客户端模块的实例缓存该应用程序进程对应的客户端状态信息表;所述消息服务端模块缓存客户端状态信息总表,所述客户端状态信息总表包括与各个消息客户端模块的实例对应的客户端状态信息表的信息;所述方法包括如下步骤:
步骤S1:所述消息服务端模块监测各个消息客户端模块的实例与所述消息服务端模块的连接状态;
步骤S2:对于失去连接的消息客户端模块的实例,所述消息服务端模块清除客户端状态信息总表中的部分信息,所述部分信息为所述失去连接的消息客户端模块的实例对应的客户端状态信息表中的信息;
步骤S3:每个与所述失去连接的消息客户端模块的实例对应的应用程序进程,均执行以下操作:通过消息客户端模块周期性地自动重连所述消息服务端模块,连接成功后,将所述消息客户端模块的实例对应的当前的客户端状态信息表发送给所述消息服务端模块;基于更新策略及所述当前的客户端状态信息表,所述消息服务端模块更新所述客户端状态信息总表。
优选地,所述应用程序进程对应的客户端状态信息表能够唯一地标识所述应用程序进程;所述消息服务端模块基于所述消息服务端模块缓存的客户端状态信息总表对各个应用程序进程进行监听,获取各个应用程序进程通过消息客户端模块的实例分配的唯一标识、与所述消息服务端模块建立的连接、创建的会话、订阅的主题名称、订阅的主题的属性、以及接收的队列名称。
优选地,所述消息服务端模块在接收到新的消息,且该新的消息为消息客户端模块订阅的主题或者队列的消息时,所述消息服务端模块基于更新后的客户端状态信息总表,查找运行所述消息客户端模块的各个实例对应的状态信息表,查找到若干个与所述消息服务端模块保持通信连接的所述消息客户端模块的实例对应的状态信息表,则这些与所述消息服务端模块保持通信连接的所述消息客户端模块的实例处于正常运行状态;将新的、且为所述消息客户端模块订阅的消息推送给处于正常运行状态的消息客户端模块的实例对应的应用程序。
优选地,所述客户端状态信息总表包括客户端总标识、连接总信息、会话总信息、订阅主题总信息及接收队列总信息,所述客户端总标识为每个所述消息客户端模块实例分配的唯一的64字节的标识组成的汇总表,所述连接总信息为每个所述消息客户端模块实例分配的唯一的TCP套接字连接组成的汇总表,所述会话总信息为每个所述消息客户端模块实例在与消息服务端模块建立的连接上创建的会话列表组成的汇总表,所述订阅主题总信息表示每个所述消息客户端模块实例在某个会话上订阅的所有主题的名称及订阅属性的列表,所述接收队列总信息表示每个所述消息客户端模块实例在某个会话上的所有接收队列的名称列表。
优选地,所述更新策略为,所述消息服务端模块确定各个消息客户端模块的实例重新建立连接的时间,按照重新建立连接的时间顺序,对各个消息客户端模块的实例对应的应用程序进程进行排序;将排在最前面的、未处理的应用程序进程的消息客户端模块的实例对应的客户端状态信息发送给所述消息服务端模块,将该应用程序进程标记为已处理。
优选地,在将排在最前面的、未处理的应用程序进程的消息客户端模块的实例对应的客户端状态信息发送给所述消息服务端模块期间,任何应用程序进程基于其自身对应的消息客户端模块的实例对所述消息服务端模块的访问,所述消息服务端模块均不处理。
本发明所提供的一种消息中间件的消息客户端模块的高可用的装置,所述消息中间件包括消息服务端模块及一个或多个消息客户端模块;每个所述消息客户端模块部署于一个客户端,且每个客户端能够运行多个应用程序,各应用程序运行时,应用程序进程引用一个消息客户端模块的实例,所述消息客户端模块的实例缓存该应用程序进程对应的客户端状态信息表;所述消息服务端模块缓存客户端状态信息总表,所述客户端状态信息总表包括与各个消息客户端模块的实例对应的客户端状态信息表的信息,所述装置包括:
连接监测模块:配置为所述消息服务端模块监测各个消息客户端模块的实例与所述消息服务端模块的连接状态;
状态信息总表更新模块:配置为对于失去连接的消息客户端模块的实例,所述消息服务端模块清除客户端状态信息总表中的部分信息,所述部分信息为所述失去连接的消息客户端模块的实例对应的客户端状态信息表中的信息;
重连模块:配置为每个与所述失去连接的消息客户端模块的实例对应的应用程序进程,均执行以下操作:通过消息客户端模块周期性地自动重连所述消息服务端模块,连接成功后,将所述消息客户端模块的实例对应的当前的客户端状态信息表发送给所述消息服务端模块;基于更新策略及所述当前的客户端状态信息表,所述消息服务端模块更新所述客户端状态信息总表。
本发明所提供的一种计算机可读存储介质,所述存储介质中存储有多条指令;所述多条指令,用于由处理器加载并执行如前所述方法。
本发明所提供的一种电子设备,其特征在于,所述电子设备,包括:
处理器,用于执行多条指令;
存储器,用于存储多条指令;
其中,所述多条指令,用于由所述存储器存储,并由所述处理器加载并执行如前所述方法。
有益效果:
(1)本发明能够提升应用程序的运维管理效率。基于消息中间件的应用程序往往由于网络、主机、操作系统以及消息中间件出现故障,导致应用程序出现故障,故障恢复的常见手段包括重启应用程序的应用进程。本发明能极大提升消息中间件的消息客户端模块的高可用性,在发生上述故障时无需由运维管理人员重启应用程序,从而提升了应用程序的运维管理效率。
(2)本发明能够提升应用程序的高可用性。消息客户端模块一般由一个代理程序和一个应用程序组成,例如C接口代理程序是一个动态连接库,提供给一个可执行程序形态的应用程序使用。一个基于消息的应用系统由许许多多这样的消息客户端模块组成,消息客户端模块的高可用性可以为整个应用系统的高可用性提供有力支撑。
(3)本发明方案执行简单,易于执行。
(4) 本发明也为消息中间件应用的离线使用提供了技术手段。在网络环境复杂、信道不稳定的环境中,网络可能频繁断开甚至较长时间不可用,从而导致消息客户端模块处于离线状态,通过缓存的状态表,消息客户端模块可以及时记录和保存应用程序发出的消息处理请求,确保应用程序也能离线运行,一旦网络可用则迅速与消息服务端模块取得联系,执行缓存的消息处理请求,并恢复正常的消息收发能力。
附图说明
图1为本发明提供的消息中间件的消息客户端模块的高可用的方法流程示意图;
图2为本发明提供的消息中间件的消息客户端模块的高可用的方法的架构示意图;
图3为本发明提供的客户端状态信息的数据结构示意图;
图4为本发明提供的消息客户端模块的客户端状态信息回传给消息服务端模块的流程示意图;
图5为本发明提供的消息中间件的消息客户端模块的高可用的装置的结构示意图。
具体实施方式
下面结合附图和实施例,对本发明进行详细描述。
如图1-图2所示,本发明提出了一种消息中间件的消息客户端模块的高可用的方法,所述消息中间件包括消息服务端模块及一个或多个消息客户端模块;每个所述消息客户端模块部署于一个客户端,且每个客户端能够运行多个应用程序,各应用程序运行时,应用程序进程引用一个消息客户端模块的实例,所述消息客户端模块的实例缓存该应用程序进程对应的客户端状态信息表;所述消息服务端模块缓存客户端状态信息总表,所述客户端状态信息总表包括与各个消息客户端模块的实例对应的客户端状态信息表的信息;所述方法包括如下步骤:
步骤S1:所述消息服务端模块监测各个消息客户端模块的实例与所述消息服务端模块的连接状态;
步骤S2:对于失去连接的消息客户端模块的实例,所述消息服务端模块清除客户端状态信息总表中的部分信息,所述部分信息为所述失去连接的消息客户端模块的实例对应的客户端状态信息表中的信息;
步骤S3:每个与所述失去连接的消息客户端模块的实例对应的应用程序进程,均执行以下操作:通过消息客户端模块周期性地自动重连所述消息服务端模块,连接成功后,将所述消息客户端模块的实例对应的当前的客户端状态信息表发送给所述消息服务端模块;基于更新策略及所述当前的客户端状态信息表,所述消息服务端模块更新所述客户端状态信息总表。
本发明中,每个应用程序进程对应一个客户端状态信息表,该客户端状态信息表缓存了该应用程序的消息客户端模块的实例的状态信息,包括该应用程序进程通过消息客户端模块的实例分配的唯一标识、与消息服务端模块建立的连接、创建的会话、订阅的主题名称、订阅的主题的属性、以及接收的队列名称。
进一步地,所述应用程序进程对应的客户端状态信息表能够唯一地标识所述应用程序进程;所述消息服务端模块基于所述消息服务端模块缓存的客户端状态信息总表对各个应用程序进程进行监听,获取各个应用程序进程通过消息客户端模块的实例分配的唯一标识、与消息服务端模块建立的连接、创建的会话、订阅的主题名称、订阅的主题的属性、以及接收的队列名称。
所述步骤S1,所述消息服务端模块监测各个消息客户端模块的实例与所述消息服务端模块的连接状态,对于保持连接的消息客户端模块的实例,所述消息服务端模块的客户端状态信息总表保存和维护各个所述保持连接的消息客户端模块的实例的客户端状态信息表中的信息。
本实施例中,若保持连接,则认为所述消息客户端模块的实例正常运行,该消息客户端模块的实例的运行状态信息表中记录的运行状态信息有效,因此,所述消息服务端模块的客户端状态信息总表保存和维护该消息客户端模块的实例的客户端状态信息表中的信息。
进一步地,所述消息服务端模块在接收到新的消息,且该新的消息为消息客户端模块订阅的主题或者接收的队列的消息时,所述消息服务端模块基于更新后的客户端状态信息总表,查找运行所述消息客户端模块的各个实例对应的状态信息表,查找到若干个与所述消息服务端模块保持通信连接的所述消息客户端模块的实例对应的状态信息表,则这些与所述消息服务端模块保持通信连接的所述消息客户端模块的实例处于正常运行状态;将新的、且为所述消息客户端模块订阅的消息推送给处于正常运行状态的消息客户端模块的实例对应的应用程序。
本实施例中,所述消息客户端模块的实例由对应的应用程序进程启动。
本发明中,与现有技术中由所述消息服务端模块单方面缓存和管理客户端状态不同,本发明设计的消息中间件客户端高可用方法采用了消息客户端模块和消息服务端模块共同缓存和管理客户端状态的策略,主要包括三个方面:
1)与所述消息服务端模块相类似,消息客户端模块的实例也维护一份客户端状态,所述客户端状态包括客户端标识、连接信息、会话信息、主题订阅信息、接收队列信息等;
2)当所述消息服务端模块感知到所述消息客户端模块断开时,清除维护的客户端状态信息总表中与失去连接的所述消息客户端模块的实例的客户端状态信息表中的信息;
3)当所述消息客户端模块感知到所述消息服务端模块断开时,周期性地重连所述消息服务端模块,一旦连接上,将所述消息客户端模块的实例维护的客户端状态信息发送给所述消息服务端模块进行状态重建。
进一步地,如图3所示,所述应用程序进程对应的客户端状态信息表能够唯一地标识所述应用程序进程、以及该进程与所述消息服务端模块进行交互的上下文。所述客户端状态信息表用来在所述消息服务端模块从网络异常、软件异常中恢复后,在所述消息服务端模块恢复所述消息客户端模块的上下文,从而确保所述消息客户端模块的高可用。
所述客户端状态信息总表包括客户端总标识、连接总信息、会话总信息、订阅主题总信息及接收队列总信息,所述客户端总标识为每个所述消息客户端模块实例分配的唯一的64字节的标识组成的汇总表,所述连接总信息为每个所述消息客户端模块实例分配的唯一的TCP套接字连接组成的汇总表,所述会话总信息为每个所述消息客户端模块实例在与消息服务端模块建立的连接上创建的会话列表组成的汇总表,所述订阅主题总信息表示每个所述消息客户端模块实例在某个会话上订阅的所有主题的名称及订阅属性的列表,所述接收队列总信息表示每个所述消息客户端模块实例在某个会话上的所有接收队列的名称列表。
本实施例中,由消息客户端模块的实例缓存客户端状态信息表可以实现网络故障、服务端软件/主机崩溃等失联场景下的消息客户端模块的高可用,实现消息客户端模块/主机崩溃时客户端状态信息总表的及时清理。下面分别分析各种场景下的高可用方案。
(1)网络故障场景下客户端高可用
消息客户端模块和消息服务端模块均缓存客户端状态,在网络断开异常情况下,双方均正常运行并感知到对方断开,消息服务端模块清除掉客户端状态信息总表中与失去连接的所述消息客户端模块的实例的客户端状态信息表中的信息,消息客户端模块的实例则周期性地自动重连消息服务端模块,当网络恢复、双方重新建立连接后,消息服务端模块重建该消息客户端模块的实例的状态,双方继续基于共同的状态进行消息传输,避免了应用程序的重启,实现了消息客户端模块的高可用,具体步骤如下:
步骤S11:应用程序启动消息客户端模块的实例,所述消息客户端模块的实例和消息服务端模块之间进行通信,通信内容包括建立连接、建立会话、创建队列和主题、订阅主题、发送队列和/或主题消息、接收队列和/或主题消息;
步骤S12:在通信过程中,所述消息客户端模块的实例和消息服务端模块分别更新各自缓存的客户端状态信息表、客户端状态信息总表;
步骤S13:若网络出现故障,进入步骤S14;否则,方法结束;
本实施例中,故障原因包括但不限于部署所述消息客户端模块或者消息服务端模块的计算机的网线断开、交换机出现故障。
步骤S14:所述消息服务端模块监测到所述消息客户端模块的实例连接的断开,将所述客户端状态信息总表中与所述消息客户端模块的实例对应的状态信息清除;
步骤S15:网络故障期间,所述消息客户端模块的实例定期(比如1秒连一次)重连所述消息服务端模块,直到网络故障排除后,所述消息客户端模块的实例连接上所述消息服务端模块;
步骤S16:所述消息客户端模块的实例获取缓存的客户端状态信息表,读取客户端状态信息;
步骤S17:所述消息客户端模块的实例将所述客户端状态信息发送到所述消息服务端模块;
步骤S18:所述消息服务端模块基于更新策略及所述当前的客户端状态信息表,所述消息服务端模块更新所述客户端状态信息总表,即在所述消息服务端模块重建所述客户端状态信息;
步骤S19:所述消息客户端模块的实例和所述消息服务端模块基于更新后的客户端状态信息总表、以及与所述消息客户端模块的实例对应的客户端状态信息表进行消息传输。
(2)消息服务端模块和/或主机崩溃场景下消息客户端模块高可用
当消息服务端模块或者部署所述消息服务端模块的主机崩溃后,消息客户端模块的实例会周期性地自动连接消息服务端模块,一旦部署所述消息服务端模块的主机和/或消息服务端模块重启完毕,消息客户端模块的实例会连接上消息服务端模块并帮助消息服务端模块重建客户端状态总表,双方恢复正常的消息传输能力,在此过程中并未重启消息客户端模块的实例,实现了消息客户端模块的高可用。
(3)消息客户端模块的实例对应的应用进程和/或主机崩溃场景下状态及时清理
当消息客户端模块的实例或者部署所述消息客户端模块的实例的主机崩溃后,由于消息客户端模块的实例的客户端状态此时已经没有任何作用,无需针对消息客户端模块的高可用进行任何处理,所述消息服务端模块监测到与所述消息服务端模块连接的一个或多个消息客户端模块的实例断开连接,所述消息服务端模块清除其缓存的客户端状态信息总表中与失去连接的所述消息客户端模块的实例的客户端状态信息表中的信息,即可及时清理无用的客户端状态信息,不浪费服务器端的资源,不影响整个系统的可用性。
如图4所示,所述更新策略为,所述消息服务端模块确定各个消息客户端模块的实例重新建立连接的时间,按照重新建立连接的时间顺序,对各个消息客户端模块的实例对应的应用程序进程进行排序;将排在最前面的、未处理的应用程序进程的消息客户端模块的实例对应的客户端状态信息发送给所述消息服务端模块,将该应用程序进程标记为已处理。
进一步地,在将排在最前面的、未处理的应用程序进程的消息客户端模块的实例对应的客户端状态信息发送给所述消息服务端模块期间,任何应用程序进程基于其自身对应的消息客户端模块的实例对所述消息服务端模块的访问,所述消息服务端模块均不处理。
进一步地,基于互斥锁锁定客户端状态信息总表,同一时刻仅允许一个消息客户端模块的实例在客户端状态信息总表中更新,避免并发更新冲突,确保客户端状态信息总表的数据不被损坏。
进一步地,当所有失联的消息客户端模块都向所述消息服务端模块同步状态信息完毕后,所述消息服务端模块通知所有消息客户端模块,开始同时接受多个消息客户端模块的实例对应的应用进程的请求,恢复消息的收发传递。
本实施例中,例如,消息服务端模块恢复正常运行时,所有失联的消息客户端模块都在尝试连接消息服务端模块,比如消息客户端模块1首先连接上了,然后将其状态信息同步到消息服务端模块,所述消息客户端模块1的实例获取缓存的客户端状态信息表,读取客户端状态信息,将所述客户端状态信息发送到所述消息服务端模块,所述消息服务端模块基于所述当前的客户端状态信息表,所述消息服务端模块更新所述客户端状态信息总表,即在所述消息服务端模块重建所述客户端状态信息。消息服务端模块在此过程中不接受其他消息客户端模块的任何请求。
以此类推,按时间顺序,后续依次有消息客户端模块2、……、消息客户端模块N与所述消息服务端模块建立了连接,也依次执行获取缓存的客户端状态信息表,读取客户端状态信息,将所述客户端状态信息发送到所述消息服务端模块,所述消息服务端模块基于所述当前的客户端状态信息表,所述消息服务端模块更新所述客户端状态信息总表,即在所述消息服务端模块重建所述客户端状态信息。
本发明还提供了一种消息中间件的消息客户端模块的高可用的装置,如图5所示,所述消息中间件包括消息服务端模块及一个或多个消息客户端模块;每个所述消息客户端模块部署于一个客户端,且每个客户端能够运行多个应用程序,各应用程序运行时,应用程序进程引用一个消息客户端模块的实例,所述消息客户端模块的实例缓存该应用程序进程对应的客户端状态信息表;所述消息服务端模块缓存客户端状态信息总表,所述客户端状态信息总表包括与各个消息客户端模块的实例对应的客户端状态信息表的信息,所述装置包括:
连接监测模块:配置为所述消息服务端模块监测各个消息客户端模块的实例与所述消息服务端模块的连接状态;
状态信息总表更新模块:配置为对于失去连接的消息客户端模块的实例,所述消息服务端模块清除客户端状态信息总表中的部分信息,所述部分信息为所述失去连接的消息客户端模块的实例对应的客户端状态信息表中的信息;
重连模块:配置为每个与所述失去连接的消息客户端模块的实例对应的应用程序进程,均执行以下操作:通过消息客户端模块周期性地自动重连所述消息服务端模块,连接成功后,将所述消息客户端模块的实例对应的当前的客户端状态信息表发送给所述消息服务端模块;基于更新策略及所述当前的客户端状态信息表,所述消息服务端模块更新所述客户端状态信息总表。
以上的具体实施例仅描述了本发明的设计原理,该描述中的部件形状,名称可以不同,不受限制。所以,本发明领域的技术人员可以对前述实施例记载的技术方案进行修改或等同替换;而这些修改和替换未脱离本发明创造宗旨和技术方案,均应属于本发明的保护范围。
Claims (9)
1.一种消息中间件的消息客户端模块的高可用的方法,其特征在于:所述消息中间件包括消息服务端模块及一个或多个消息客户端模块;每个所述消息客户端模块部署于一个客户端,且每个客户端能够运行多个应用程序,各应用程序运行时,应用程序进程引用一个消息客户端模块的实例,所述消息客户端模块的实例缓存该应用程序进程对应的客户端状态信息表;所述消息服务端模块缓存客户端状态信息总表,所述客户端状态信息总表包括与各个消息客户端模块的实例对应的客户端状态信息表的信息;所述方法包括如下步骤:
步骤S1:所述消息服务端模块监测各个消息客户端模块的实例与所述消息服务端模块的连接状态;
步骤S2:对于失去连接的消息客户端模块的实例,所述消息服务端模块清除客户端状态信息总表中的部分信息,所述部分信息为所述失去连接的消息客户端模块的实例对应的客户端状态信息表中的信息;
步骤S3:每个与所述失去连接的消息客户端模块的实例对应的应用程序进程,均执行以下操作:通过消息客户端模块周期性地自动重连所述消息服务端模块,连接成功后,将所述消息客户端模块的实例对应的当前的客户端状态信息表发送给所述消息服务端模块;基于更新策略及所述当前的客户端状态信息表,所述消息服务端模块更新所述客户端状态信息总表。
2.如权利要求1所述的方法,其特征在于,所述应用程序进程对应的客户端状态信息表能够唯一地标识所述应用程序进程;所述消息服务端模块基于所述消息服务端模块缓存的客户端状态信息总表对各个应用程序进程进行监听,获取各个应用程序进程通过消息客户端模块的实例分配的唯一标识、与所述消息服务端模块建立的连接、创建的会话、订阅的主题名称、订阅的主题的属性、以及接收的队列名称。
3.如权利要求1所述的方法,其特征在于,所述消息服务端模块在接收到新的消息,且该新的消息为消息客户端模块订阅的主题或者接收的队列的消息时,所述消息服务端模块基于更新后的客户端状态信息总表,查找运行所述消息客户端模块的各个实例对应的状态信息表,查找到若干个与所述消息服务端模块保持通信连接的所述消息客户端模块的实例对应的状态信息表,则这些与所述消息服务端模块保持通信连接的所述消息客户端模块的实例处于正常运行状态;将新的、且为所述消息客户端模块订阅的消息推送给处于正常运行状态的消息客户端模块的实例对应的应用程序。
4.如权利要求1所述的方法,其特征在于,所述客户端状态信息总表包括客户端总标识、连接总信息、会话总信息、订阅主题总信息及接收队列总信息,所述客户端总标识为每个所述消息客户端模块实例分配的唯一的64字节的标识组成的汇总表,所述连接总信息为每个所述消息客户端模块实例分配的唯一的TCP套接字连接组成的汇总表,所述会话总信息为每个所述消息客户端模块实例在与消息服务端模块建立的连接上创建的会话列表组成的汇总表,所述订阅主题总信息表示每个所述消息客户端模块实例在某个会话上订阅的所有主题的名称及订阅属性的列表,所述接收队列总信息表示每个所述消息客户端模块实例在某个会话上的所有接收队列的名称列表。
5.如权利要求1-4中任一项所述的方法,其特征在于,所述更新策略为,所述消息服务端模块确定各个消息客户端模块的实例重新建立连接的时间,按照重新建立连接的时间顺序,对各个消息客户端模块的实例对应的应用程序进程进行排序;将排在最前面的、未处理的应用程序进程的消息客户端模块的实例对应的客户端状态信息发送给所述消息服务端模块,将该应用程序进程标记为已处理。
6.如权利要求5所述的方法,其特征在于,在将排在最前面的、未处理的应用程序进程的消息客户端模块的实例对应的客户端状态信息发送给所述消息服务端模块期间,任何应用程序进程基于其自身对应的消息客户端模块的实例对所述消息服务端模块的访问,所述消息服务端模块均不处理。
7.一种消息中间件的消息客户端模块的高可用的装置,其特征在于:所述消息中间件包括消息服务端模块及一个或多个消息客户端模块;每个所述消息客户端模块部署于一个客户端,且每个客户端能够运行多个应用程序,各应用程序运行时,应用程序进程引用一个消息客户端模块的实例,所述消息客户端模块的实例缓存该应用程序进程对应的客户端状态信息表;所述消息服务端模块缓存客户端状态信息总表,所述客户端状态信息总表包括与各个消息客户端模块的实例对应的客户端状态信息表的信息,所述装置包括:
连接监测模块:配置为所述消息服务端模块监测各个消息客户端模块的实例与所述消息服务端模块的连接状态;
状态信息总表更新模块:配置为对于失去连接的消息客户端模块的实例,所述消息服务端模块清除客户端状态信息总表中的部分信息,所述部分信息为所述失去连接的消息客户端模块的实例对应的客户端状态信息表中的信息;
重连模块:配置为每个与所述失去连接的消息客户端模块的实例对应的应用程序进程,均执行以下操作:通过消息客户端模块周期性地自动重连所述消息服务端模块,连接成功后,将所述消息客户端模块的实例对应的当前的客户端状态信息表发送给所述消息服务端模块;基于更新策略及所述当前的客户端状态信息表,所述消息服务端模块更新所述客户端状态信息总表。
8.一种计算机可读存储介质,所述存储介质中存储有多条指令;所述多条指令,用于由处理器加载并执行如权利要求1-6中任一项所述方法。
9.一种电子设备,其特征在于,所述电子设备,包括:
处理器,用于执行多条指令;
存储器,用于存储多条指令;
其中,所述多条指令,用于由所述存储器存储,并由所述处理器加载并执行如权利要求1-6中任一项所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211358961.0A CN115412603B (zh) | 2022-11-02 | 2022-11-02 | 一种消息中间件的消息客户端模块的高可用的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211358961.0A CN115412603B (zh) | 2022-11-02 | 2022-11-02 | 一种消息中间件的消息客户端模块的高可用的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115412603A CN115412603A (zh) | 2022-11-29 |
CN115412603B true CN115412603B (zh) | 2022-12-27 |
Family
ID=84169280
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211358961.0A Active CN115412603B (zh) | 2022-11-02 | 2022-11-02 | 一种消息中间件的消息客户端模块的高可用的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115412603B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN201854301U (zh) * | 2010-06-13 | 2011-06-01 | 大连海事大学 | 在手机设备上进行数据共享的中间件系统 |
CN102968310A (zh) * | 2012-12-05 | 2013-03-13 | 武汉烽火普天信息技术有限公司 | 一种一体化高性能应用软件架构及构建方法 |
CN109388509A (zh) * | 2018-10-22 | 2019-02-26 | 上海朔羡网络科技有限公司 | 消息处理系统、方法、计算机设备及可读存储介质 |
CN110474917A (zh) * | 2019-08-16 | 2019-11-19 | 深圳前海微众银行股份有限公司 | 消息中间件上、下线方法、装置、设备及可读存储介质 |
CN114328618A (zh) * | 2021-11-30 | 2022-04-12 | 苏州浪潮智能科技有限公司 | 一种缓存数据同步方法、装置、设备及存储介质 |
CN114584602A (zh) * | 2022-03-01 | 2022-06-03 | 百果园技术(新加坡)有限公司 | 一种会话状态管理方法、系统、装置、设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2466289A (en) * | 2008-12-18 | 2010-06-23 | Veda Technology Ltd | Executing a service application on a cluster by registering a class and storing subscription information of generated objects at an interconnect |
-
2022
- 2022-11-02 CN CN202211358961.0A patent/CN115412603B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN201854301U (zh) * | 2010-06-13 | 2011-06-01 | 大连海事大学 | 在手机设备上进行数据共享的中间件系统 |
CN102968310A (zh) * | 2012-12-05 | 2013-03-13 | 武汉烽火普天信息技术有限公司 | 一种一体化高性能应用软件架构及构建方法 |
CN109388509A (zh) * | 2018-10-22 | 2019-02-26 | 上海朔羡网络科技有限公司 | 消息处理系统、方法、计算机设备及可读存储介质 |
CN110474917A (zh) * | 2019-08-16 | 2019-11-19 | 深圳前海微众银行股份有限公司 | 消息中间件上、下线方法、装置、设备及可读存储介质 |
CN114328618A (zh) * | 2021-11-30 | 2022-04-12 | 苏州浪潮智能科技有限公司 | 一种缓存数据同步方法、装置、设备及存储介质 |
CN114584602A (zh) * | 2022-03-01 | 2022-06-03 | 百果园技术(新加坡)有限公司 | 一种会话状态管理方法、系统、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN115412603A (zh) | 2022-11-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6934247B2 (en) | Recovery following process or system failure | |
US7518983B2 (en) | Proxy response apparatus | |
JP5714571B2 (ja) | キャッシュクラスタを構成可能モードで用いるキャッシュデータ処理 | |
US20120197822A1 (en) | System and method for using cluster level quorum to prevent split brain scenario in a data grid cluster | |
EP1231756A2 (en) | Method and system for maintaining connections in a network | |
EP1489811A2 (en) | System and method for managing cached objects using notification bonds | |
CN1650582A (zh) | 实现高可用性光纤信道交换机的方法和装置 | |
CN111615066A (zh) | 一种基于广播的分布式微服务注册及调用方法 | |
CN107623703B (zh) | 全局事务标识gtid的同步方法、装置及系统 | |
CN106603319B (zh) | 一种故障处理的方法、管理服务器以及逻辑服务器 | |
CN105493474A (zh) | 用于支持用于同步分布式数据网格中的数据的分区级别日志的系统及方法 | |
CN108173971A (zh) | 一种基于主备切换的MooseFS高可用方法及系统 | |
CN114764380A (zh) | 一种基于etcd的分布式集群控制方法和装置 | |
CN111314098A (zh) | 一种ha系统中实现vip地址漂移的方法和装置 | |
CN114461428A (zh) | 一种用于双机集群脑裂的仲裁方法 | |
CN112887367B (zh) | 实现分布式集群高可用的方法、系统及计算机可读介质 | |
CN115412603B (zh) | 一种消息中间件的消息客户端模块的高可用的方法及装置 | |
CN112506682A (zh) | 业务服务器异常救济方法、装置和计算机可读存储介质 | |
CN114363350B (zh) | 一种服务治理系统及方法 | |
CN113190546B (zh) | 一种Eureka服务管控方法、系统及可读存储介质 | |
CN111382132A (zh) | 医学影像数据云存储系统 | |
CN114116178A (zh) | 集群框架任务管理方法以及相关装置 | |
CN111586110B (zh) | 一种raft在出现点对点故障时的优化处理方法 | |
CN115866018B (zh) | 业务处理方法、装置、电子设备及计算机可读存储介质 | |
CN115145782A (zh) | 一种服务器切换方法,MooseFS系统及存储介质 |
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 |