CN110392120A - 一种消息推送过程中故障的恢复方法及装置 - Google Patents
一种消息推送过程中故障的恢复方法及装置 Download PDFInfo
- Publication number
- CN110392120A CN110392120A CN201910754813.2A CN201910754813A CN110392120A CN 110392120 A CN110392120 A CN 110392120A CN 201910754813 A CN201910754813 A CN 201910754813A CN 110392120 A CN110392120 A CN 110392120A
- Authority
- CN
- China
- Prior art keywords
- message
- receiving time
- caching
- database
- push
- 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
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/06—Management of faults, events, alarms or notifications
- H04L41/0654—Management of faults, events, alarms or notifications using network fault recovery
-
- 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/50—Network services
- H04L67/55—Push-based network services
-
- 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/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
-
- 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/50—Network services
- H04L67/60—Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
- H04L67/62—Establishing a time schedule for servicing the requests
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种消息推送过程中故障的恢复方法及装置,该方法包括:确定当前需要推送的至少一个消息,并根据所述至少一个消息携带的接收时间戳,依次从数据库中读取所述至少一个消息到缓存并进行本地备份;确定出现故障并启动恢复时,根据本地备份的消息标识和接收时间戳,从数据库依次读取所述本地备份的消息标识和接收时间戳的消息到缓存中;将缓存中的消息全部推送给消息订阅方后,清理所述缓存。本发明对消息的标识及接收时间戳进行本地备份,在出现故障时按照接收时间戳顺序,依次按照接收时间戳从数据库读取消息,实现模拟故障的行为和重现故障环境。
Description
技术领域
本发明涉及通信技术领域,特别涉及一种消息推送过程中故障的恢复方法及装置。
背景技术
在企业面临数据集成和***整合的背景下,产生了RPC(Remote Procedure Call,远程过程调用)中间件技术。RPC中间件技术包括CORBA(Common Object Request BrokerArchitecture,公共对象请求代理体系结构)、DCOM(Distributed Component ObjectModel,分布式组件对象模型)、RMI(Remote Method Invocation,远程方法调用)等方法,但由于采用了RPC同步处理技术,数据集成和***整合在性能、健壮性、可扩展性都存在着缺点。其中健壮性是指软件对于规范要求以外的输入情况的处理能力。健壮的***是指对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。
现有技术消息发送的过程是采用异步消息处理模型,而消息的异步的处理模型采用的非阻塞的调用特性,异步处理的过程是发送者将消息发送给消息服务器,消息服务器等待合适的时机再将消息转发给接收者。因为发送与接收的过程是异步的,其中,发送者也无需等待,所以发送者与接收者的生命周期也可以不相同。消息生命周期是消息从产生到应用直至失去使用价值为止的时间段。其中非阻塞的调用含义为在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。消息的异步的处理模型相比于同步处理技术提高了程序的性能、可扩展性和健壮性,相较于同步处理模型有着更强的竞争力。
消息服务器使用消息中间件的方法,采用了与平台无关的数据交流来实现高效可靠的信息传递功能,并且在数据通信的基础上进行分布式***的集成。通过提供给消息传递与消息排队的模型,使得消息可以在分布式的环境下拓展进程之间的通信。消息中间件机制***中,不同的对象之间通过传递消息来激活对方的事件。此种机制的传递方式可以概括为:发送者将消息发送到消息服务器,消息服务器将收到的消息存放在若干消息队列中,等待合适时机再将消息转发给接收者。消息中间件能在不同的平台之间相互通信,消息中间件能够屏蔽掉各个平台及各个协议的特性,以实现应用程序之间的协同通信,此种机制的***既能提供同步和异步的连接,也可以在任何时候将中间件的消息进行传送或者储存转发,这是此种方法比远程调用更加有效的原因。
现有技术中,向服务器发送消息时服务器发生故障,故障回放方法可以有效的应对数据丢失的问题,故障回放是基于RDB(Relational Database,关系数据库)文件来实现,可称为RDB故障回放,RDB文件是一种压缩的二进制文件,其中保存了某一时刻数据库中内存当中的数据。现有的RDB数据可恢复机制是将某一时刻中的数据库消息保存在内存当中,数据库缓存消息被保存在本地。当断电或宕机时,本地中等同于保存了一份缓存文件,通过RDB文件,可以方便的将数据恢复到数据库内存故障前的时刻,避免了意外宕机产生的数据丢失问题,保护了数据的安全。
但是,现有的基于RDB的数据库缓存消息恢复机制,仅可以将某一时刻的数据库中保存在内存当中的数据,保存在本地文件中,相当于复制了一份数据,即该方案只能查看数据异常和备份,无法模拟业务流时序依赖类型故障发生场景的问题。
发明内容
本发明提供了一种消息推送过程中故障的恢复方法,用于解决现有基于RDB的数据库缓存消息恢复机制,只能查看数据异常和备份,无法模拟业务流时序依赖类型故障发生场景的问题。
根据本发明实施例第一方面,提供一种消息推送过程中故障的恢复方法,该方法包括:
确定当前需要推送的至少一个消息,并根据所述至少一个消息携带的接收时间戳,依次从数据库中读取所述至少一个消息到缓存,并对缓存中消息的标识及接收时间戳进行本地备份;
确定出现故障并启动恢复时,根据本地备份的消息标识和接收时间戳,按照接收时间戳的顺序,从数据库依次读取所述标识对应的消息到缓存中;
将缓存中的消息全部推送给消息订阅方后,清理所述缓存。
从消息发布方接收到至少一个消息,根据所述至少一个消息的接收时间点,将所述消息携带上接收时间戳与消息标识后存储到数据库中。
可选地,所述接收时间戳为接收时间或接收时间先后顺序的编号。
可选地,确定当前需要推送的至少一个消息,包括:
根据预定的消息推送规则,确定当前需要推送的至少一个消息;
基于消息订阅方的请求,确定当前需要推送的至少一个消息。
可选地,所述缓存包括与不同的主题类型对应的缓存块,读取所述至少一个消息到缓存,包括:
从数据库中读取所述至少一个消息,根据各消息的主题类型缓存到对应的缓存块。
可选地,所述数据库中存储的消息,不同的主题类型的消息存储在同一个数据库中不同存储区域,或者分布式的存放在多个数据库中。
可选地,所述对缓存中消息的标识及接收时间戳进行本地备份,包括:
将所述缓存中消息的标识及接收时间戳以二进制的压缩文件RDB的形式保存在本地的RDB设备中;
相应地,所述方法还包括:
生成执行按照接收时间戳的顺序,从数据库依次读取消息的标识对应的消息到缓存中的故障模拟回放程序;
确定出现故障时,从所述RDB设备中读取发生故障时段保存的消息的标识和对应的接收时间戳;
设置本地运行环境为故障发生时的运行环境之后,通过所述故障模拟回放程序进行故障回放,并分析故障原因。根据数据库相关状态信息确定要读取的消息所在的数据库,按照所述读取顺序依次从对应的数据库中读取消息到缓存中。
根据本发明实施例的第二方面,一种消息推送过程中故障的恢复装置,所述装置包括:
消息读取备份模块,用于确定当前需要推送的至少一个消息,并根据所述至少一个消息携带的接收时间戳,依次从数据库中读取所述至少一个消息到缓存,并对缓存中消息的标识及接收时间戳进行本地备份;
故障恢复模块,用于确定出现故障并启动恢复时,根据本地备份的消息标识和接收时间戳,按照接收时间戳的顺序,从数据库依次读取所述标识对应的消息到缓存中;
消息推送模块,用于将缓存中的消息全部推送给消息订阅方后,清理所述缓存。
可选地,该装置还包括:
数据存放模块,用于从消息发布方接收到至少一个消息,根据所述至少一个消息的接收时间点,将所述消息携带上接收时间戳与消息标识后存储到数据库中。
可选地,所述接收时间戳为接收时间或接收时间先后顺序的编号。
可选地,消息读取备份模块确定当前需要推送的至少一个消息,包括:
根据预定的消息推送规则,确定当前需要推送的至少一个消息;
基于消息订阅方的请求,确定当前需要推送的至少一个消息。
所述缓存包括与不同的主题类型对应的缓存块,所述消息读取备份模块读取所述至少一个消息到缓存,包括:
从数据库中读取所述至少一个消息,根据各消息的主题类型缓存到对应的缓存块。
可选地,所述数据库中存储的消息,不同的主题类型的消息存储在同一个数据库中不同存储区域,或者分布式的存放在多个数据库中。
可选地,所述对缓存中消息的标识及接收时间戳进行本地备份,包括:
将所述缓存中消息的标识及接收时间戳以二进制的压缩文件RDB的形式保存在本地的RDB设备中;
相应地,所述方法还包括:
生成执行按照接收时间戳的顺序,从数据库依次读取消息的标识对应的消息到缓存中的故障模拟回放程序;
确定出现故障时,从所述RDB设备中读取发生故障时段保存的消息的标识和对应的接收时间戳;
设置本地运行环境为故障发生时的运行环境之后,通过所述故障模拟回放程序进行故障回放,并分析故障原因。根据数据库相关状态信息确定要读取的消息所在的数据库,按照所述读取顺序依次从对应的数据库中读取消息到缓存中。
第三方面,本发明实施例提供一种消息推送过程中故障的恢复装置,所述装置包括处理器和存储器,所述存储器中存储有计算机程序,所述处理器用于执行所述存储器中的计算机程序,用于执行如下步骤:
确定当前需要推送的至少一个消息,并根据所述至少一个消息携带的接收时间戳,依次从数据库中读取所述至少一个消息到缓存,并对缓存中消息的标识及接收时间戳进行本地备份;
确定出现故障并启动恢复时,根据本地备份的消息标识和接收时间戳,按照接收时间戳的顺序,从数据库依次读取所述标识对应的消息到缓存中;
将缓存中的消息全部推送给消息订阅方后,清理所述缓存。
可选地,所述处理器还用于:
从消息发布方接收到至少一个消息,根据所述至少一个消息的接收时间点,将所述消息携带上接收时间戳与消息标识后存储到数据库中。
可选地,所述接收时间戳为接收时间或接收时间先后顺序的编号。
可选地,所述处理器确定当前需要推送的至少一个消息,包括:
根据预定的消息推送规则,确定当前需要推送的至少一个消息;
基于消息订阅方的请求,确定当前需要推送的至少一个消息。
可选地,所述缓存包括与不同的主题类型对应的缓存块,读取所述至少一个消息到缓存,包括:
从数据库中读取所述至少一个消息,根据各消息的主题类型缓存到对应的缓存块。
可选地,所述数据库中存储的消息,不同的主题类型的消息存储在同一个数据库中不同存储区域,或者分布式的存放在多个数据库中。
可选地,所述对缓存中消息的标识及接收时间戳进行本地备份,包括:
将所述缓存中消息的标识及接收时间戳以二进制的压缩文件RDB的形式保存在本地的RDB设备中;
相应地,所述方法还包括:
生成执行按照接收时间戳的顺序,从数据库依次读取消息的标识对应的消息到缓存中的故障模拟回放程序;
确定出现故障时,从所述RDB设备中读取发生故障时段保存的消息的标识和对应的接收时间戳;
设置本地运行环境为故障发生时的运行环境之后,通过所述故障模拟回放程序进行故障回放,并分析故障原因。根据数据库相关状态信息确定要读取的消息所在的数据库,按照所述读取顺序依次从对应的数据库中读取消息到缓存中。
第四方面,本发明实施例提供一种计算机程序介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令被处理器执行时实现上述消息推送过程中故障的恢复方法。
利用本发明实施例提供的消息推送过程中故障的恢复方法及装置,具有以下有益效果:
本发明在接收到消息存储到数据库携带上接收时间戳信息,并在消息推送过程中将消息的接收时间戳及消息标识进行本地备份,因此在出行故障时,可以根据备份的消息的接收时间戳,确定恢复过程中从数据库读取消息的顺序,恢复过程中消息的读取顺序与之前推送过程中消息的读取顺序一致,模拟业务流时序依赖类型故障发生场景的问题,可以实现故障顺序的模拟回放。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中提供的一种消息推送故障恢复***关系示意图;
图2为本发明实施例中提供的一种消息服务器订阅分类推送方法示意图;
图3a为本发明实施例中提供的一种RDB复现设备消息保存示意图;
图3b为本发明实施例中提供的一种RDB复现设备消息恢复示意图;
图4为本发明实施例中提供的一种消息推送过程中故障的恢复方法流程示意图;
图5为本发明实施例中提供的消息服务器在消息推送过程中故障的恢复方法示意图;
图6为本发明实施例中提供的一种消息推送过程中故障的恢复装置模块的示意图;
图7为本发明实施例中一种消息推送过程中故障的恢复装置的示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合说明书附图对本发明实施例作进一步详细描述。应当理解,此处所描述的实施例仅用于说明和解释本发明,并不用于限定本发明。
参见图1,图1是本申请实施例中提供的一种消息推送故障恢复***关系示意图;该***包括消息服务器101、RDB复现设备102、消息发布方103、消息订阅方104、数据库105。
上述消息服务器101与消息发布方103和消息订阅方104通过网络连接,消息发布方103通过登录消息服务器101,将要发布的消息发送给消息服务器101,消息服务器101接收到消息后,根据接收时间将消息加上对应的接收时间戳,并缓存到数据库105中。
消息服务器101从数据库105中取得消息订阅方所需消息,在RDB复现设备102中备份读取的消息的标识和接收时间戳,在消息服务器101环境故障时,从RDB复现设备102中获取带有时间戳的消息标识,根据接收时间戳对消息进行恢复,最终重新按照正确顺序发送给消息订阅方104。
消息服务器101与数据库105,可以为消息服务器与数据库两者分处异地的情况,同样的也可以在消息服务器101中集成数据库105消息服务器,消息只需从消息服务器中调用。
数据库中存储的消息中,不同的主题类型的消息存储在同一个数据库中不同存储区域,或者分布式的存放在多个数据库中。消息订阅方的设备可以是蜂窝电话、无绳电话、会话启动协议(Session Initiation Protocol,SIP)电话、无线本地环路(WirelessLocalLoop,WLL)站、个人数字处理(Personal Digital Assistant,PDA)、具有无线通信功能的手持设备、计算设备或连接到无线调制解调器的其它处理设备、车载设备、可穿戴设备以及5G网络中的移动台或者未来演进的公共陆地移动网(Public LandMobile Network,PLMN)网络中的订阅设备等。
作为可选的实施方式,可以通过消息中间件技术对消息进行存储以及向消息订阅方分发消息。
Topic即消息主题类型,消息发布方103发布的消息携带消息主题类型的信息,消息服务器101从消息发布方103接收到消息,通过Topic对消息进行分类。
如图2所示,图2为本发明实施例中提供的一种消息服务器订阅分类推送方法示意图,消息服务器101利用消息中间件技术MOM(Message Oriented Middleware,面向消息的中间件)对于每个topic的订阅者(consumer)都独立维护一个可变长的消息缓存块,消息发布方103通过对应的APP,该APP相当于消息发布方,如图中所示的APP1、APP2和APP5向消息服务器101推送消息,消息服务器接收到消息后,确定消息Topic为Topic1,将该Topic1的消息存储到消息服务器101中,利用中间件技术确定需要向运行APP3及APP4消息订阅方104发送Topic1的多个消息时,将发送给APP3的消息订阅方的多个Topic1消息拷贝一份缓存到该消息订阅方的缓存块中,将发送给APP4的消息订阅方的多个Topic1消息拷贝一份缓存到该消息订阅方的缓存块中,将缓存到缓存块中的消息主动发送给对应的消息订阅方104;消息订阅方104通过监听消息可读事件,读取消息并处理。
上述RDB(Relational Database,关系数据库)复现设备102用于在消息服务器执行消息发布过程中出行故障时,对故障进行恢复。如图3a所示,图3a为本发明实施例中提供的一种RDB复现设备消息保存示意图,在消息服务器进行消息发布的过程中,RDB复现设备102通过redis将消息服务器缓存中的数据保存为RDB文件,Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存也可持久化的日志型、Key-Value数据库,并提供多种语言的API。如图3b所示,在消息服务器101出现故障后,进行故障恢复时,RDB复现设备102通过redis从RDB文件读取备份的数据进行故障恢复。
实施例1
目前利用RDB文件只能将数据库中故障时刻的状态进行记录和还原,只能起到查看数据异常和备份的功能,无法模拟业务流时序依赖类型故障发生场景,可用性无法得到有效提升,同时也无法有效进行故障的回放和降低生产环境占用。
鉴于上述问题,本申请实施例提供一种消息推送中故障的恢复方法,该方法的执行主体为RDB复现设备102,该RDB复现设备102可以独立于消息服务器单独设置,也可以与消息服务器集成在一起,具体地,本申请实施例RDB复现设备102与消息服务器集成在一起,统称为消息服务器。
本申请实施例中消息服务器从消息发布方接收到至少一个消息,根据至少一个消息的接收时间点或时间段,将消息携带上接收的时间戳并存储到数据库中,消息服务器101在将消息打上时间戳时,不区分消息的Topic,仅依据消息的接收时间点来打上对应的时间戳。上述时间戳的作用是代表消息服务器接收消息的先后顺序,可以是具体的时间信息,如以年月日时秒等单位区分的时间,或者可以是代表接收时间先后顺序的编号,如可以依据接收的先后顺序编号来代表接收时间的先后顺序,当然,还可以是其他的编号形式。
消息服务器根据消息接收的时间点或时间段对消息打上时间戳时,如果在同一时刻接收到多个消息,则多个消息的接收时间戳相同。
基于上述消息接收存储机制,本申请实施例提供一种消息推送过程中故障的恢复方法,如图4所示,图4为本发明实施例中提供的一种消息推送过程中故障的恢复方法流程示意图,该方法包括:
步骤S401,确定当前需要推送的至少一个消息,并根据所述至少一个消息携带的接收时间戳,依次从数据库中读取所述至少一个消息到缓存,并对缓存中消息的标识及接收时间戳进行本地备份;
消息服务器有着两种消息的推送方式,可以基于如下任一推送方式确定需要推送的数据库中的至少一个消息:
主动推送方式:根据预定的消息推送规则,确定当前需要推送的至少一个消息;
具体可以利用中间件技术中消息推送规则,在不需要接收消息订阅方发送推送请求的情况下,主动向消息订阅方推送消息;利用中间件技术向消息订阅方推送消息时,可以对于每个topic的订阅者(consumer)都独立维护一个可变长的消息缓存块,在确定需要推送的数据库中的至少一个消息时,根据所述至少一个消息携带的接收时间戳,依次从数据库中读取所述至少一个消息到对应的缓存并进行本地备份;
被动推送方式:基于消息订阅方的请求,确定当前需要推送的至少一个消息;
当消息订阅方有消息需求时,消息订阅方可向消息发布方发送推送请求,消息服务器基于消息订阅方的推送请求,在对请求消息订阅方的身份进行核实之后,判断该消息订阅方是否有请求消息的权限,当消息订阅方具有消息的请求权限时,由消息发布方被动的向消息服务器发出消息,反之,若请求消息订阅方没有请求消息的权限,则拒绝或对于该请求不予回应。
同样,可以利用中间件技术基于消息订阅方的推送请求向消息订阅方推送消息,可以对于每个topic的订阅者(consumer)都独立维护一个可变长的消息缓存块,在基于消息订阅方的请求,确定需要推送的至少一个消息时,根据所述至少一个消息携带的接收时间戳,依次从数据库中读取所述至少一个消息到对应的缓存并进行本地备份。
本实施例中上述备份消息可以通过RDB文件存储。
步骤S402,确定出现故障并启动恢复时,根据本地备份的消息标识和接收时间戳,按照接收时间戳的顺序,从数据库依次读取所述标识对应的消息到缓存中;
当消息在发布过程中,服务器处于断电、宕机等使得消息无法正常进行推送的任一种场景之中,防止数据存在有丢失的风险或已有丢失的情况而启动恢复时,服务器通过从RDB文件中读取备份的消息的标识及接收时间戳到缓存,由于消息之前是按照时间戳的先后顺序从数据库读取到缓存中的,因此,本实施例通过备份的消息的时间戳,同样可以按照时间戳的先后顺序向消息服务器发送请求,再次将未发送成功消息重新读取到缓存中,使得消息数据得到恢复。
对于缓存中的消息的标识以及接收时间戳需要进行本地备份,其中备份的过程包括先将存在缓存中的消息的标识以及接收时间戳以二进制的压缩文件以RDB的形式保存在本地的RDB设备中,同时还生成按照接收时间戳顺序执行的从数据库依次根据消息标识将对应消息读取的故障模拟回放程序。
当有故障发生时,从上述的RDB设备中读取发生故障时间段中保存的消息的标识以及对应的接收时间戳,以用来实现故障回放功能,在将本地环境设置为故障发生时的运行环境之后,利用上述生成的故障模拟回放程序对故障进行回放,同时分析发生故障的原因。
本实施例通过故障模拟回放程序,将故障环境下的RDB文件导入本地环境后,进行RDB文件中缓存消息标识进行读取,并根据消息的接收时间戳,按时间顺序进行快速排序后,依次自动化模拟故障环境进行通告活动,对应业务流的业务组件接收通告信号并开展相应业务工作,以此模拟故障行为和重现故障。选择相关的数据库状态信息进行排序,可以减少不必要的性能开销和耗时等待。本实施例针对每个缓存数据进行模拟,来模拟故障状态通告,从而重现出因时序类型错误导致的故障环境;
本实施例中对故障进行模拟和回放,需要严格按照故障环境中的各消息的状态信息和行为的时序和环境来进行模拟。因此,在故障回放时需要将本地环境存储的缓存文件通过实施例中的方法用故障模拟回放程序来进行故障回放,并分析出故障的原因。
步骤S403,将缓存中的消息全部推送给消息订阅方后,清理所述缓存。
一种可能的实施方式为,每推送成功一条消息后,清理缓存中的该条消息,还可以进一步清理本地备份的该消息的标识和接收时间戳;
另一种可能的实施方式,所述的清理缓存是将缓存的全部消息推送成功后,清理缓存,并清理本地备份的消息标识和接收时间戳。
清理缓存后,可以返回步骤S401再次确定当前需要推送的至少一个消息,实现消息推送的过程。
下面结合图5,通过示例来说明本实施例的消息推送过程中故障的恢复方法,如图5所示,图5为本发明实施例中提供的消息服务器在消息推送过程中故障的恢复方法示意图,图中keya、keyd、keyh等代表不同消息的标识,后面数字代表消息的接收时间先后顺序的编号,在不同的数据库中存储了对应的消息,各个不同的数据库中的消息的编号均根据消息服务器101接收消息的时间顺序编号,预先存储有数据库相关状态信息,该数据库相关状态信息包括各数据库所存储的消息的标识信息,具体过程如下:
消息服务器基于主动推送方式或被动推送方式,确定数据库相关状态信息,从所有数据库中选出有消息服务器推送的数据库1、2、3,将数据库1中的消息keya_1、keyb_4、keyc_7,数据库2中的keyd_2、keye_5、keyf_8、数据库3中的keyh_3、keyi_6、keyj_9,根据上述消息的接收时间点顺序,先从对应的数据库1中取出keya_1,再从对应的数据库2中取出keyd_2,依次类推,依次读取放到缓存中,并将数据keya_1~keyj_9消息的标识及接收时间戳备份到RDB复现设备中。
在将数据keya_1~keyj_9消息的标识及接收时间戳备份到RDB复现设备中的同时,生成按照接收时间戳顺序执行的从数据库依次根据消息标识将对应消息读取的故障模拟回放程序。在出现故障时,将在RDB复现设备中备份的消息的标识及接收时间戳取出,将本地环境设置为故障发生时运行环境,利用生成的故障模拟回放程序,根据接收时间戳确定要取出消息的时间,根据数据库相关状态信息,从所有数据库中选出有消息服务器推送的数据库1、2、3,先从数据库1中取出keya_1,再从数据库2中取出keyb_2,依次类推,直至9个消息都从数据库取入到消息服务器中,对于故障原因进行分析,以实现对于消息故障的重现和回放。
实施例2
本发明实施例提供一种消息推送过程中故障的恢复装置,如图6所示,图6为本发明实施例中提供的一种消息推送过程中故障的恢复装置模块的示意图,还包括:
消息读取备份模块601,用于确定当前需要推送的至少一个消息,并根据所述至少一个消息携带的接收时间戳,依次从数据库中读取所述至少一个消息到缓存,并对缓存中消息的标识及接收时间戳进行本地备份;
故障恢复模块602,用于确定出现故障并启动恢复时,根据本地备份的消息标识和接收时间戳,按照接收时间戳的顺序,从数据库依次读取所述标识对应的消息到缓存中;
消息推送模块603,将缓存中的消息全部推送给消息订阅方后,清理所述缓存。
可选地,该装置还包括:
数据存放模块604,用于从消息发布方接收到至少一个消息,根据所述至少一个消息的接收时间点,将所述消息携带上接收时间戳与消息标识后存储到数据库中。
可选地,所述接收时间戳为接收时间或接收时间先后顺序的编号。
可选地,消息读取备份模块确定当前需要推送的至少一个消息,包括:
根据预定的消息推送规则,确定当前需要推送的至少一个消息;
基于消息订阅方的请求,确定当前需要推送的至少一个消息。
所述缓存包括与不同的主题类型对应的缓存块,读取所述至少一个消息到缓存,包括:
从数据库中读取所述至少一个消息,根据各消息的主题类型缓存到对应的缓存块。
可选地,所述数据库中存储的消息,不同的主题类型的消息存储在同一个数据库中不同存储区域,或者分布式的存放在多个数据库中。
可选地,所述对缓存中消息的标识及接收时间戳进行本地备份,包括:
将所述缓存中消息的标识及接收时间戳以二进制的压缩文件RDB的形式保存在本地的RDB设备中;
相应地,所述方法还包括:
生成执行按照接收时间戳的顺序,从数据库依次读取消息的标识对应的消息到缓存中的故障模拟回放程序;
确定出现故障时,从所述RDB设备中读取发生故障时段保存的消息的标识和对应的接收时间戳;
设置本地运行环境为故障发生时的运行环境之后,通过所述故障模拟回放程序进行故障回放,并分析故障原因。根据数据库相关状态信息确定要读取的消息所在的数据库,按照所述读取顺序依次从对应的数据库中读取消息到缓存中。
实施例3
图7为本发明实施例中一种消息推送过程中故障的恢复装置的示意图,所述装置包括处理器和存储器等,所述存储器中存储有计算机程序,所述处理器用于执行所述存储器中的计算机程序,用于执行如下步骤:
确定当前需要推送的至少一个消息,并根据所述至少一个消息携带的接收时间戳,依次从数据库中读取所述至少一个消息到缓存,并对缓存中消息的标识及接收时间戳进行本地备份;
确定出现故障并启动恢复时,根据本地备份的消息标识和接收时间戳,按照接收时间戳的顺序,从数据库依次读取所述标识对应的消息到缓存中;
将缓存中的消息全部推送给消息订阅方后,清理所述缓存。
该消息推送过程中故障的恢复装置700可因配置或性能不同而产生比较大的差异,可以包括一个或一个以***处理器(英文全称:central processing units,英文简称:CPU)701(例如,一个或一个以上处理器)和存储器702,一个或一个以上存储应用程序704或数据705的存储介质703(例如一个或一个以上海量存储设备)。其中,存储器702和存储介质703可以是短暂存储或持久存储。存储在存储介质703的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对信息处理装置中的一系列指令操作。更进一步地,中央处理器701可以设置为与存储介质703通信,在装置700上执行存储介质703中的一系列指令操作。
装置700还可以包括一个或一个以上电源706,一个或一个以上有线或无线网络接口707,一个或一个以上输入输出接口708,和/或,一个或一个以上操作***709,例如Windows Server,Mac OS X,Unix,Linux,FreeBSD等。
可选地,所述处理器还用于:
从消息发布方接收到至少一个消息,根据所述至少一个消息的接收时间点,将所述消息携带上接收时间戳与消息标识后存储到数据库中。
可选地,所述接收时间戳为接收时间或接收时间先后顺序的编号。
可选地,所述处理器确定当前需要推送的至少一个消息,包括:
根据预定的消息推送规则,确定当前需要推送的至少一个消息;
基于消息订阅方的请求,确定当前需要推送的至少一个消息。
可选地,所述缓存包括与不同的主题类型对应的缓存块,读取所述至少一个消息到缓存,包括:
从数据库中读取所述至少一个消息,根据各消息的主题类型缓存到对应的缓存块。
可选地,所述数据库中存储的消息,不同的主题类型的消息存储在同一个数据库中不同存储区域,或者分布式的存放在多个数据库中。
可选地,所述对缓存中消息的标识及接收时间戳进行本地备份,包括:
将所述缓存中消息的标识及接收时间戳以二进制的压缩文件RDB的形式保存在本地的RDB设备中;
相应地,所述方法还包括:
生成执行按照接收时间戳的顺序,从数据库依次读取消息的标识对应的消息到缓存中的故障模拟回放程序;
确定出现故障时,从所述RDB设备中读取发生故障时段保存的消息的标识和对应的接收时间戳;
设置本地运行环境为故障发生时的运行环境之后,通过所述故障模拟回放程序进行故障回放,并分析故障原因。根据数据库相关状态信息确定要读取的消息所在的数据库,按照所述读取顺序依次从对应的数据库中读取消息到缓存中。
本发明实施例提供一种计算机程序介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令被处理器执行时实现上述消息推送过程中故障的恢复方法。
以上对本申请所提供的技术方案进行了详细介绍,本申请中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (11)
1.一种消息推送过程中故障的恢复方法,其特征在于,包括:
确定当前需要推送的至少一个消息,并根据所述至少一个消息携带的接收时间戳,依次从数据库中读取所述至少一个消息到缓存,并对缓存中消息的标识及接收时间戳进行本地备份;
确定出现故障并启动恢复时,根据本地备份的消息标识和接收时间戳,按照接收时间戳的顺序,从数据库依次读取所述标识对应的消息到缓存中;
将缓存中的消息全部推送给消息订阅方后,清理所述缓存。
2.根据权利要求1所述的方法,其特征在于,在确定当前需要推送的至少一个消息之前,还包括:
从消息发布方接收到至少一个消息后,根据所述至少一个消息的接收时间点,将所述消息携带上接收时间戳与消息标识后存储到数据库中。
3.根据权利要求1或2所述的方法,其特征在于,所述接收时间戳为接收时间点或接收时间先后顺序的编号。
4.根据权利要求1所述的方法,其特征在于,确定当前需要推送的至少一个消息,包括:
根据预定的消息推送规则,确定当前需要推送的至少一个消息;
或
基于消息订阅方的请求,确定当前需要推送的至少一个消息。
5.根据权利要求1所述的方法,其特征在于,所述缓存包括与不同的主题类型对应的缓存块,读取所述至少一个消息到缓存,包括:
读取所述至少一个消息,根据各消息的主题类型缓存到对应的缓存块。
6.根据权利要求5所述的方法,其特征在于,所述不同的主题类型的消息存储在同一个数据库中不同存储区域,或者分布式的存放在多个数据库中。
7.根据权利要求1所述的方法,其特征在于,所述对缓存中消息的标识及接收时间戳进行本地备份,包括:
将所述缓存中消息的标识及接收时间戳以二进制的压缩文件RDB的形式保存在本地的RDB设备中;
相应地,所述方法还包括:
生成执行按照接收时间戳的顺序,从数据库依次读取消息的标识对应的消息到缓存中的故障模拟回放程序;
确定出现故障时,从所述RDB设备中读取发生故障时段保存的消息的标识和对应的接收时间戳;
设置本地运行环境为故障发生时的运行环境之后,通过所述故障模拟回放程序进行故障回放,并分析故障原因。
8.根据权利要求1所述的方法,其特征在于,根据本地备份的消息标识和接收时间戳,按照接收时间戳的顺序,从数据库依次读取所述标识对应的消息到缓存中,包括:
读取本地备份的接收时间戳及消息标识,根据接收时间戳确定各消息标识对应的消息的读取顺序;
根据数据库相关状态信息确定要读取的消息所在的数据库,按照所述读取顺序依次从对应的数据库中读取消息到缓存中。
9.一种消息推送过程中故障的恢复装置,其特征在于,所述装置包括:
消息读取备份模块,用于确定当前需要推送的至少一个消息,并根据所述至少一个消息携带的接收时间戳,依次从数据库中读取所述至少一个消息的标识及接收时间戳到缓存并进行本地备份;
故障恢复模块,用于确定出现故障并启动恢复时,根据本地备份的消息标识和接收时间戳,从数据库依次读取所述备份消息的标识及接收时间戳到缓存;
消息推送模块,将缓存中的消息全部推送给消息订阅方后,清理所述缓存。
10.一种消息推送过程中故障的恢复装置,其特征在于,所述装置包括处理器和存储器,所述存储器中存储有计算机程序,所述处理器用于执行所述存储器中的计算机程序,用于执行如下步骤:
确定当前需要推送的至少一个消息,并根据所述至少一个消息携带的接收时间戳,依次从数据库中读取所述至少一个消息的标识及接收时间戳到缓存并进行本地备份;
根据本地备份的消息标识和接收时间戳所述备份的消息的标识及接收时间戳,按照接收时间戳的顺序,从数据库依次读取所述标识对应的消息到缓存中;
将缓存中的消息全部推送给消息订阅方后,清理所述缓存。
11.一种计算机程序介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令被处理器执行时实现如权利要求1~8任一项所述的消息推送过程中故障的恢复方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910754813.2A CN110392120B (zh) | 2019-08-15 | 2019-08-15 | 一种消息推送过程中故障的恢复方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910754813.2A CN110392120B (zh) | 2019-08-15 | 2019-08-15 | 一种消息推送过程中故障的恢复方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110392120A true CN110392120A (zh) | 2019-10-29 |
CN110392120B CN110392120B (zh) | 2022-06-21 |
Family
ID=68288849
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910754813.2A Active CN110392120B (zh) | 2019-08-15 | 2019-08-15 | 一种消息推送过程中故障的恢复方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110392120B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111190747A (zh) * | 2019-12-20 | 2020-05-22 | 北京金山云网络技术有限公司 | 用于消息队列的消息丢失检测方法和装置 |
CN111611090A (zh) * | 2020-05-13 | 2020-09-01 | 浙江创邻科技有限公司 | 分布式消息处理方法及*** |
CN112486831A (zh) * | 2020-12-04 | 2021-03-12 | 锐捷网络股份有限公司 | 一种测试***、方法、电子设备及存储介质 |
CN113489635A (zh) * | 2021-06-18 | 2021-10-08 | 深圳软牛科技有限公司 | 基于微信的消息恢复方法和相关设备 |
CN115086421A (zh) * | 2022-08-22 | 2022-09-20 | 广东电网有限责任公司广州供电局 | 一种分布式优化的多智能代理协作方法及相关设备 |
CN116016265A (zh) * | 2022-12-12 | 2023-04-25 | 广州文远知行科技有限公司 | 消息全链路监控方法、装置、***、设备和存储介质 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5293617A (en) * | 1990-12-29 | 1994-03-08 | Nec Corporation | Data base system capable of quickly restoring a data block in a data section when a fault occurs during operation |
CN1684429A (zh) * | 2004-04-16 | 2005-10-19 | 华为技术有限公司 | 在通信***中实现信令和接口消息回放的装置及其方法 |
CN103842969A (zh) * | 2012-09-25 | 2014-06-04 | 株式会社东芝 | 信息处理*** |
CN105159818A (zh) * | 2015-08-28 | 2015-12-16 | 东北大学 | 内存数据管理中日志恢复方法及其仿真*** |
CN105792275A (zh) * | 2016-04-27 | 2016-07-20 | 天津大学 | 一种基于无人机的移动网络信号外场测量方法 |
CN106130882A (zh) * | 2016-07-13 | 2016-11-16 | 北京百度网讯科技有限公司 | 用于传输消息的方法和装置 |
CN107454171A (zh) * | 2017-08-10 | 2017-12-08 | 深圳前海微众银行股份有限公司 | 消息服务***及其实现方法 |
CN107480002A (zh) * | 2017-07-26 | 2017-12-15 | 阿里巴巴集团控股有限公司 | 消息处理方法及装置、电子设备 |
CN107592215A (zh) * | 2017-08-31 | 2018-01-16 | 郑州云海信息技术有限公司 | 一种管理消息中间件的方法 |
CN109451032A (zh) * | 2018-11-20 | 2019-03-08 | 上海联寓智能科技有限公司 | 一种消息传递*** |
-
2019
- 2019-08-15 CN CN201910754813.2A patent/CN110392120B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5293617A (en) * | 1990-12-29 | 1994-03-08 | Nec Corporation | Data base system capable of quickly restoring a data block in a data section when a fault occurs during operation |
CN1684429A (zh) * | 2004-04-16 | 2005-10-19 | 华为技术有限公司 | 在通信***中实现信令和接口消息回放的装置及其方法 |
CN103842969A (zh) * | 2012-09-25 | 2014-06-04 | 株式会社东芝 | 信息处理*** |
CN105159818A (zh) * | 2015-08-28 | 2015-12-16 | 东北大学 | 内存数据管理中日志恢复方法及其仿真*** |
CN105792275A (zh) * | 2016-04-27 | 2016-07-20 | 天津大学 | 一种基于无人机的移动网络信号外场测量方法 |
CN106130882A (zh) * | 2016-07-13 | 2016-11-16 | 北京百度网讯科技有限公司 | 用于传输消息的方法和装置 |
CN107480002A (zh) * | 2017-07-26 | 2017-12-15 | 阿里巴巴集团控股有限公司 | 消息处理方法及装置、电子设备 |
CN107454171A (zh) * | 2017-08-10 | 2017-12-08 | 深圳前海微众银行股份有限公司 | 消息服务***及其实现方法 |
CN107592215A (zh) * | 2017-08-31 | 2018-01-16 | 郑州云海信息技术有限公司 | 一种管理消息中间件的方法 |
CN109451032A (zh) * | 2018-11-20 | 2019-03-08 | 上海联寓智能科技有限公司 | 一种消息传递*** |
Non-Patent Citations (2)
Title |
---|
SUDHIR DIXIT: "Wireless IP and Building the Mobile Internet", 《IEEE》 * |
邬祥宇: "乘客紧急通信的音视频合成与同步播放软件研究及应用", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111190747A (zh) * | 2019-12-20 | 2020-05-22 | 北京金山云网络技术有限公司 | 用于消息队列的消息丢失检测方法和装置 |
WO2021121370A1 (zh) * | 2019-12-20 | 2021-06-24 | 北京金山云网络技术有限公司 | 用于消息队列的消息丢失检测方法和装置 |
CN111611090A (zh) * | 2020-05-13 | 2020-09-01 | 浙江创邻科技有限公司 | 分布式消息处理方法及*** |
CN111611090B (zh) * | 2020-05-13 | 2021-12-28 | 浙江创邻科技有限公司 | 分布式消息处理方法及*** |
CN112486831A (zh) * | 2020-12-04 | 2021-03-12 | 锐捷网络股份有限公司 | 一种测试***、方法、电子设备及存储介质 |
CN113489635A (zh) * | 2021-06-18 | 2021-10-08 | 深圳软牛科技有限公司 | 基于微信的消息恢复方法和相关设备 |
CN113489635B (zh) * | 2021-06-18 | 2023-08-18 | 深圳软牛科技有限公司 | 基于微信的消息恢复方法和相关设备 |
CN115086421A (zh) * | 2022-08-22 | 2022-09-20 | 广东电网有限责任公司广州供电局 | 一种分布式优化的多智能代理协作方法及相关设备 |
CN115086421B (zh) * | 2022-08-22 | 2022-11-18 | 广东电网有限责任公司广州供电局 | 一种分布式优化的多智能代理协作方法及相关设备 |
CN116016265A (zh) * | 2022-12-12 | 2023-04-25 | 广州文远知行科技有限公司 | 消息全链路监控方法、装置、***、设备和存储介质 |
CN116016265B (zh) * | 2022-12-12 | 2024-03-29 | 广州文远知行科技有限公司 | 消息全链路监控方法、装置、***、设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110392120B (zh) | 2022-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110392120A (zh) | 一种消息推送过程中故障的恢复方法及装置 | |
JP7090744B2 (ja) | 分散データベースクラスタシステム、及びデータ同期方法 | |
CN110222091B (zh) | 一种海量数据实时统计分析方法 | |
CN113641511B (zh) | 一种消息通信方法和装置 | |
CN107491343B (zh) | 一种基于云计算的跨集群资源调度*** | |
JP4204769B2 (ja) | フェールオーバを処理するシステムおよび方法 | |
US8539434B2 (en) | Method for the management, logging or replay of the execution of an application process | |
US20050028171A1 (en) | System and method enabling multiple processes to efficiently log events | |
CN111338773A (zh) | 一种分布式定时任务调度方法、调度***及服务器集群 | |
CN107124305B (zh) | 节点设备运行方法及节点设备 | |
CN112597249B (zh) | 一种业务数据的同步分发存储方法及*** | |
CN107040576A (zh) | 信息推送方法及装置、通讯*** | |
CN111464612A (zh) | 一种恶劣环境下提供稳定计算服务的方法 | |
CN108733515A (zh) | 文件备份的调度方法、文件备份方法、装置及存储介质 | |
CN112486707A (zh) | 基于Redis的消息异步消费方法及装置 | |
CN109302324A (zh) | 一种私有云监控预警方法及*** | |
CN113127499B (zh) | 一种基于区块链的微服务方法、设备及介质 | |
CN114900449A (zh) | 一种资源信息管理方法、***及装置 | |
CN109939441A (zh) | 应用复盘校验处理方法及*** | |
CN117714532A (zh) | 一种基于Timeline模型的数据信息推送方法、网关及相关设备 | |
CN117076195A (zh) | 参数的调整方法、装置、存储介质及电子装置 | |
JP2017194729A (ja) | 計算機システムおよびシステム状態再現方法 | |
CN112463312B (zh) | 一种定时任务的动态维护***和方法、介质、计算设备 | |
CN108255515A (zh) | 一种实现定时器服务的方法和装置 | |
CN111163117B (zh) | 一种基于Zookeeper的对等式调度方法和装置 |
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 |