CN105471714A - 一种消息处理的方法和装置 - Google Patents

一种消息处理的方法和装置 Download PDF

Info

Publication number
CN105471714A
CN105471714A CN201510903396.5A CN201510903396A CN105471714A CN 105471714 A CN105471714 A CN 105471714A CN 201510903396 A CN201510903396 A CN 201510903396A CN 105471714 A CN105471714 A CN 105471714A
Authority
CN
China
Prior art keywords
message
write
persistent storage
queue
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.)
Pending
Application number
CN201510903396.5A
Other languages
English (en)
Inventor
黄维荣
王巍
廖慧琴
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN201510903396.5A priority Critical patent/CN105471714A/zh
Publication of CN105471714A publication Critical patent/CN105471714A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明提供一种消息处理的方法和装置,其中方法包括:消息中间件接收到消息时,将消息写入消息队列和持久化存储;若消息写入消息队列和持久化存储均失败,则将所述消息写入本地磁盘。本发明对于接收到的消息,通过写入消息队列和持久化存储来保证消息写入互为备份,即便两者都写入失败,也能够将消息写入本地磁盘,保证消息不被丢失,提高了消息中间件处理消息的可靠性。在消息推送部分,双推送进程保证了消息推送的可靠性,也提升了消息推送的响应速度。

Description

一种消息处理的方法和装置
【技术领域】
本发明涉及计算机应用技术领域,特别涉及一种消息处理的方法和装置。
【背景技术】
现今,越来越多的企业面临着各种各样的数据集成和系统整合,消息中间件技术应运而生。消息中间件指的是利用高效可靠的消息传递机制,进行平台无关的数据交流,并可以基于数据通信进行分布式系统的集成。具体地,消息中间件基于消息的异步处理模型,消息发送者将消息发送给消息中间件(也称为消息服务器),消息中间件在合适的使用再将消息转发给消息接收者。发送和接收是异步的,消息发送者无需等待,消息发送者和消息接收者的生命周期可以不必相同,并且消息发送者可以将消息间接转发给多个接收者,大大提高了整个消息系统的性能、可扩展性和健壮性。
目前消息中间件在处理消息时,将消息发送者的消息写入消息队列,然后在合适的时机从消息队列中读取消息并转发给消息接收者。然而,这种方式一旦消息写入消息队列失败,则可能会造成消息丢失,消息投递失败,可靠性难以保证。
【发明内容】
有鉴于此,本发明提供了一种消息处理的方法和装置,以便于提高消息中间件在处理消息过程中的可靠性。
具体技术方案如下:
本发明提供了一种消息处理的方法,该方法包括:
消息中间件接收到消息时,将消息写入消息队列和持久化存储;
若消息写入消息队列和持久化存储均失败,则将所述消息写入本地磁盘。
根据本发明一优选实施方式,所述将消息写入消息队列和持久化存储包括:
采用双写的方式将所述消息写入消息队列和持久化存储;或者,
将消息写入消息队列,若写入失败,则将所述消息写入持久化存储;或者,
将消息写入持久化存储,若写入失败,则将所述消息写入消息队列。
根据本发明一优选实施方式,若消息写入持久化存储失败,写入消息队列成功,该方法还包括:
将所述消息从消息队列回调并重新写入持久化存储。
根据本发明一优选实施方式,该方法还包括:
若重新写入持久化存储失败,则将所述消息写入本地磁盘。
根据本发明一优选实施方式,该方法还包括:
将消息从本地磁盘回调并重新写入持久化存储。
根据本发明一优选实施方式,该方法还包括:
采用两个推送进程以竞争模式分别从消息队列和持久化存储读取消息,并将读取到的消息推送至消息接收者;
所述竞争模式保证对于相同的消息而言,只有一个推送进程能够读取到该消息。
根据本发明一优选实施方式,所述采用两个推送进程以竞争模式分别从写入队列和持久化存储读取消息包括:
推送进程从写入队列或持久化存储中读取消息时,判断该消息的被处理状态,若该消息正在被处理,或者已被处理成功,则不再对该消息进行处理;若该消息未被处理,或者被处理失败,则从该推送进程对应的写入队列或持久化存储中读取消息,并更新该消息的被处理状态为正在被处理。
根据本发明一优选实施方式,该方法还包括:
若推送进程推送消息至消息接收者成功,则更新该消息的被处理状态为已被处理成功;
若推送进程读取消息或推送消息至消息接收者失败,则更新该消息的被处理状态为被处理失败。
根据本发明一优选实施方式,持久化存储对应的推送进程若从持久化存储中读取消息或推送消息至消息接收者失败,则按照预设的重试间隔,重新从所述持久化存储中读取消息并推送至消息接收者,直至推送消息至消息接收者成功或达到预设的重试次数。
根据本发明一优选实施方式,若持久化存储中未处理的消息数量或者处理失败的消息数量超过预设阈值,则所述持久化存储对应的推送进程进行告警。
本发明还提供了一种消息处理的装置,设置于消息中间件,该装置包括:
接收单元,用于接收消息;
第一写入单元,用于将所述接收单元接收到的消息写入消息队列和持久化存储;
第二写入单元,用于若消息写入消息队列和持久化存储均失败,则将该消息写入本地磁盘。
根据本发明一优选实施方式,所述第一写入单元,具体用于:
采用双写的方式将所述消息写入消息队列和持久化存储;或者,
将消息写入消息队列,若写入失败,则将所述消息写入持久化存储;或者,
将消息写入持久化存储,若写入失败,则将所述消息写入消息队列。
根据本发明一优选实施方式,该装置还包括:
第三写入单元,用于若所述第一写入单元写入持久化存储失败,写入消息队列成功,则将所述消息从消息队列回调并重新写入持久化存储。
根据本发明一优选实施方式,所述第二写入单元,还用于在所述第三写入单元重新写入持久化存储失败时,将所述消息写入本地磁盘。
根据本发明一优选实施方式,该装置还包括:
第四写入单元,用于将消息从本地磁盘回调并重新写入持久化存储。
根据本发明一优选实施方式,该装置还包括:第一推送单元和第二推送单元;
所述第一推送单元和第二推送单元以竞争模式分别从消息队列和持久化存储读取消息,并将读取到的消息推送至消息接收者;
所述竞争模式保证对于相同的消息而言,只有一个推送单元能够读取到该消息。
根据本发明一优选实施方式,所述第一推送单元和所述第二推送单元在分别从写入队列或持久化存储中读取消息时,具体执行:
判断该消息的被处理状态,若该消息正在被处理,或者已被处理成功,则不再对该消息进行处理;若该消息未被处理,或者被处理失败,则从该推送单元对应的写入队列或持久化存储中读取消息,并更新该消息的被处理状态为正在被处理。
根据本发明一优选实施方式,所述第一推送单元和所述第二推送单元,还用于:
若推送消息至消息接收者成功,则更新该消息的被处理状态为已被处理成功;
若读取消息或推送消息至消息接收者失败,则更新该消息的被处理状态为被处理失败。
根据本发明一优选实施方式,所述第二推送单元,还用于若从持久化存储中读取消息或推送消息至消息接收者失败,则按照预设的重试间隔,重新从所述持久化存储中读取消息并推送至消息接收者,直至推送消息至消息接收者成功或达到预设的重试次数。
根据本发明一优选实施方式,所述第二推送单元,还用于若持久化存储中未处理的消息数量或者处理失败的消息数量超过预设阈值,则进行告警。
由以上技术方案可以看出,对于接收到的消息,通过写入消息队列和持久化存储来保证消息写入互为备份,即便两者都写入失败,也能够将消息写入本地磁盘,保证消息不被丢失,提高了消息中间件处理消息的可靠性。
【附图说明】
图1为本发明实施例提供的消息中间件两部分消息处理的示意图;
图2为本发明实施例提供的消息接收处理的主要流程图;
图3为本发明实施例提供的消息接收处理的详细方法流程图;
图4为本发明实施例提供的消息推送处理的详细方法流程图;
图5为本发明实施例提供的装置结构图。
【具体实施方式】
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
如图1所构成的系统,对于消息中间件102而言,对消息的处理主要包括两个部分:其一是消息接收处理,第二是消息推送处理。其中,消息接收处理指的是从消息发送者101接收消息,并将接收到的消息写入存储空间104,如图1中所示的①。消息推送处理指的是从存储空间104读取消息,并推送至消息接收者103,如图1中所示的②。这两部分是异步处理过程,下面分别对这两部分的处理进行详细描述。
图2为本发明实施例提供的消息接收处理的主要流程图,如图2中所示,该流程主要包括以下步骤:
在201中,消息中间件接收到消息时,将消息写入消息队列和持久化存储。
在本发明实施例中会涉及到三种存储介质:消息队列、持久化存储和本地磁盘。消息队列是目前消息传输过程中最常用的消息容器,本地磁盘也是很常用的存储介质,在此不做详述。由于内存中的数据不能持久保存,就需要一种存储形式能够使得内存中的数据保存的持久些,因此就出现了持久化存储。持久化存储可以包括诸如数据库、Redis等。
本步骤中,消息中间件可以采用以下三种方式中的一种实现:
第一种方式:采用双写的方式将接收到的消息写入消息队列和持久化存储,即将接收到的消息尝试并行地写入消息队列和持久化存储。
第二种方式:将消息先尝试写入持久化存储,若写入失败,则再尝试将消息写入消息队列。
第三种方式:将消息先尝试写入消息队列,若写入失败,则再尝试将消息写入持久化存储。
依据可靠性程度的大小,上述三种方式优选第一种方式,第二种方式次之,第三种方式再次之。
在202中,若消息写入消息队列和持久化存储均失败,则将该消息写入本地磁盘。
尽管由消息队列和持久化存储来尽量保证消息的投递,一旦两种都存储失败,则将消息写入本地磁盘尽量保证消息不被丢失,这种方式显然大大提升了消息处理的可靠性。
下面以图3所示流程为例,对上述消息接收部分进行一个优选实施方式的描述。如图3所示,该方法可以具体包括以下步骤:
在301中,接收到消息后,采用双写的方式将消息写入消息队列和持久化存储。
在302中,判断写入是否成功,若都写入成功,或者消息写入持久化存储成功但写入消息队列失败,则在307中结束该消息接收部分的处理流程;若消息写入持久化存储失败但写入消息队列成功,则执行303;若都写入失败,则执行305。
在303中,将消息从消息队列回调并重新写入持久化存储。
采用消息队列和持久化存储双写的方式,保证了两者能够互相候补,但由于消息队列通常是先入先出的形式,对于推送不成功的消息容易造成消息丢失,因此为了提高可靠性,可以将消息队列中的消息进行回调,重新写入持久化存储。
本步骤中,可以周期性地执行回调;也可以实时地执行消息回调,即将消息队列中的消息实时地进行回调;还可以依据消息量进行回调,例如当消息队列中的消息量达到一定程度时进行回调;等等。
在304中,判断重新写入是否成功,如果是,则在307中结束消息接收部分的处理流程;否则,执行305。
在305中,将该消息写入本地磁盘。
如果从消息队列中回调消息,将其重新写入持久化存储失败,为了尽量保证消息不丢失,可以将消息写入本地磁盘,从而提高可靠性。
在306中,将消息从本地磁盘回调并重新写入持久化存储。
对于写入本地磁盘的消息,为了保证该部分消息仍能够推送至消息接收者,则可以从本地磁盘将消息回调并重新写入持久化存储。在回调时,可以周期性地进行回调,也可以基于事件触发进行回调,还可以基于本地磁盘中的消息量进行回调,等等。
下面对消息推送处理部分进行详细描述。由于存在消息队列和持久化存储,并且消息接收部分的双写方式可能会造成消息队列和持久化存储中保存有相同的消息。因此在消息推送处理部分,可以采用两个推送进程以竞争模式分别从消息队列和持久化存储读取消息,并将读取到的消息推送至消息接收者。其中竞争模式可以保证对于相同的消息而言,还有一个推送进程能够读取到该消息。为了方便描述,后续将消息队列对应的推送进程称为第一推送进程,将持久化存储对应的推送进程称为第二推送进程。
无论是第一推送进程还是第二推送进程,其执行的流程可以如图4中所示,以实现上述的竞争模式,具体可以包括以下步骤:
在401中,在从写入队列或持久化存储中读取消息时,判断该消息的被处理状态,若该消息正在被处理或者已被处理成功,则说明另一个推送进程已经处理了该消息,就不需要对该消息进行处理了。若该消息未被处理,或者被处理失败,则执行402。
在402中,从对应的写入队列或持久化存储中读取消息,并更新该消息的处理状态为正在被处理。
在403中,判断是否读取消息成功,若是,则执行404;否则执行407。
在404中,将读取的消息推送至消息接收者。
在405中,判断消息推送是否成功,若是,则执行406;否则,则执行407。
在406中,更新该消息的被处理状态为已被处理成功。
在407中,更新该消息的被处理状态为被处理失败。
在本实施例中,对于消息的被处理状态可以通过一个状态表的方式进行记录和维护,也可以在消息中进行记录和携带。通过这种类似于“锁”的方式,保证同时只有一个进程对同一个消息进行处理,当然也可以采用其他的竞争方式,在此不再穷举。
为了更进一步提高消息处理的可靠性,第二推送进程若从持久化存储中读取消息失败,或者推送消息至消息接收者失败,则可以按照预设的重试间隔,重新从持久化存储中读取消息并推送至消息接收者,直至推送消息至消息接收者成功或者达到预设的重试次数。
在本发明实施例中,可以针对不同任务类型的消息,灵活设置重试间隔或重试次数。对于消息而言,通常在消息头中会包含消息的任务类型信息,依据该信息就可以采用其对应的重试间隔和重试次数。
如果持久化存储中未处理的消息数量超过预设阈值(可以是未处理的消息绝对数量超过预设数量阈值,也可以是为处理的消息占持久化存储空间的比例超过预设的比例阈值),也就是积压的消息数量过多,则可能是由于中间件的性能影响或者压力过大等问题导致,第二推送进程可以进行告警。如果持久化存储中处理失败的消息数量超过预设阈值,也就是消息推送失败的几率很大,则可能是由于消息接收者出现异常或者网络出现异常等,第二推送进程也可以进行告警。管理人员可以根据告警进行问题的排查和解决。
以上是对本发明所提供的方法进行的详细描述,下面结合实施例对本发明提供的装置进行详细描述。
图5为本发明实施例提供的装置结构图,如图5中所示,该装置可以包括:接收单元01、第一写入单元02和第二写入单元03,还可以进一步包括第三写入单元04、第四写入单元05、第一推送进程06和第二推送进程07。各组成单元的主要功能如下:
接收单元01负责接收消息,即来自消息发送者的消息。
第一写入单元02负责将接收单元01接收到的消息写入消息队列11和持久化存储12。具体地,可以采用以下方式中的一种:
第一种方式:采用双写的方式将消息写入消息队列11和持久化存储12。
第二种方式:将消息写入消息队列11,若写入失败,则将消息写入持久化存储12。
第三种方式:将消息写入持久化存储12,若写入失败,则将消息写入消息队列11。
若消息写入消息队列11和持久化存储12均失败,则第二写入单元03负责将该消息写入本地磁盘13,从而保证消息不被丢失。
采用消息队列11和持久化存储12双写的方式,保证了两者能够互相候补,但由于消息队列11通常是先入先出的形式,对于推送不成功的消息容易造成消息丢失。因此为了提高可靠性,若第一写入单元02写入持久化存储12失败,写入消息队列11成功,则第三写入单元04可以将消息从消息队列11回调并重新写入持久化存储12。
其中第三写入单元04可以周期性地执行回调;也可以实时地执行消息回调,即将消息队列11中的消息实时地进行回调;还可以依据消息量进行回调,例如当消息队列11中的消息量达到一定程度时进行回调;等等。
若第三写入单元04重新写入持久化存储12失败,则可以由第二写入单元03将消息写入本地磁盘13,从而防止消息丢失。
对于写入本地磁盘13的消息,为了保证该部分消息仍能够推送至消息接收者,第四写入单元05可以将消息从本地磁盘13回调并重新写入持久化存储12。在回调时,可以周期性地进行回调,也可以基于事件触发进行回调,还可以基于本地磁盘13中的消息量进行回调,等等。
消息推送部分可以由第一推送单元06和第二推送单元07执行,其中第一推送单元06对应消息队列11,负责从消息队列11中读取消息并推送给消息接收者,第二推送单元07对应持久化存储12,负责从持久化存储12中读取消息并推送给消息接收者。
第一推送单元06和第二推送单元07可以以竞争模式分别从消息队列11和持久化存储12读取消息。竞争模式保证对于相同的消息而言,只有一个推送单元能够读取到该消息。
其中,第一推送单元06和第二推送单元07在分别从写入队列或持久化存储12中读取消息时,可以首先判断该消息的被处理状态,若该消息正在被处理,或者已被处理成功,则不再对该消息进行处理;若该消息未被处理,或者被处理失败,则从该推送单元对应的写入队列或持久化存储12中读取消息,并更新该消息的被处理状态为正在被处理。
若推送消息至消息接收者成功,则可以更新该消息的被处理状态为已被处理成功;若读取消息或推送消息至消息接收者失败,则更新该消息的被处理状态为被处理失败。
为了更进一步提高消息处理的可靠性,第二推送单元07若从持久化存储12中读取消息或推送消息至消息接收者失败,则按照预设的重试间隔,重新从持久化存储12中读取消息并推送至消息接收者,直至推送消息至消息接收者成功或达到预设的重试次数。在本发明实施例中,可以针对不同任务类型的消息,灵活设置重试间隔或重试次数。
若持久化存储12中未处理的消息数量或者处理失败的消息数量超过预设阈值,则第二推送单元07可以进行告警,以便管理人员可以根据告警进行问题的排查和解决。
需要说明的是,上述的消息队列11、持久化存储12和本地磁盘13可以不是上述装置中的存储介质,而是消息中间件所在设备中已有的存储介质。
本发明提供的上述方法和装置可以应用于多种应用场景,从而实现消息中间件在两个系统之间的消息异步处理。举一个应用场景的例子,在电商平台,交易系统和财务系统分别负责不同的任务处理,其中交易系统负责实现买家与卖家之间的交易达成,从而形成订单。而财务系统负责在交易完成之后的财务结算和管理。由于交易系统和财务系统之间产生的交互并没有实时性的要求,因此可以通过中间件的方式实现消息的异步处理,即将交易系统发送的消息(例如订单信息)进行接收并写入存储空间,然后在合适的时机从存储空间读取消息并推送至财务系统。由于财务系统以及交易系统的不同要求和性能,通常交易系统比财务系统的反应更快,如果没有消息中间件的处理,则会给交易系统造成非常大的压力和依赖性,因此一方面消息中间件这种异步处理的方式能够快速给交易系统以反馈;另一方面,能够对两系统进行解耦合,降低对财务系统的压力和依赖性。
由以上描述可以看出,本发明提供的方法和装置可以具备以下优点:
1)对于接收到的消息,通过写入消息队列和持久化存储来保证消息写入互为备份,即便两者都写入失败,也能够将消息写入本地磁盘,保证消息不被丢失,提高了消息中间件处理消息的可靠性。
通过实验考证,每一种存储介质写入的可靠性为99.9%,那么总体而言,其可靠性就能够达到99.9999999%。
2)在消息推送部分,双推送进程采用竞争方式分别从消息队列和持久化存储中进行消息推送,保证了消息推送的可靠性。另外,这种双推送进程的方式,也提升了消息推送的响应速度。
3)另外,在消息接收部分采用消息回调重写机制,在消息推送部分采用消息重试和挤压告警的机制,更进一步保证了消息中间件处理消息的可靠性。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(RandomAccessMemory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

Claims (20)

1.一种消息处理的方法,其特征在于,该方法包括:
消息中间件接收到消息时,将消息写入消息队列和持久化存储;
若消息写入消息队列和持久化存储均失败,则将所述消息写入本地磁盘。
2.根据权利要求1所述的方法,其特征在于,所述将消息写入消息队列和持久化存储包括:
采用双写的方式将所述消息写入消息队列和持久化存储;或者,
将消息写入消息队列,若写入失败,则将所述消息写入持久化存储;或者,
将消息写入持久化存储,若写入失败,则将所述消息写入消息队列。
3.根据权利要求1所述的方法,其特征在于,若消息写入持久化存储失败,写入消息队列成功,该方法还包括:
将所述消息从消息队列回调并重新写入持久化存储。
4.根据权利要求3所述的方法,其特征在于,该方法还包括:
若重新写入持久化存储失败,则将所述消息写入本地磁盘。
5.根据权利要求1所述的方法,其特征在于,该方法还包括:
将消息从本地磁盘回调并重新写入持久化存储。
6.根据权利要求1至5任一权项所述的方法,其特征在于,该方法还包括:
采用两个推送进程以竞争模式分别从消息队列和持久化存储读取消息,并将读取到的消息推送至消息接收者;
所述竞争模式保证对于相同的消息而言,只有一个推送进程能够读取到该消息。
7.根据权利要求6所述的方法,其特征在于,所述采用两个推送进程以竞争模式分别从写入队列和持久化存储读取消息包括:
推送进程从写入队列或持久化存储中读取消息时,判断该消息的被处理状态,若该消息正在被处理,或者已被处理成功,则不再对该消息进行处理;若该消息未被处理,或者被处理失败,则从该推送进程对应的写入队列或持久化存储中读取消息,并更新该消息的被处理状态为正在被处理。
8.根据权利要求7所述的方法,其特征在于,该方法还包括:
若推送进程推送消息至消息接收者成功,则更新该消息的被处理状态为已被处理成功;
若推送进程读取消息或推送消息至消息接收者失败,则更新该消息的被处理状态为被处理失败。
9.根据权利要求6所述的方法,其特征在于,持久化存储对应的推送进程若从持久化存储中读取消息或推送消息至消息接收者失败,则按照预设的重试间隔,重新从所述持久化存储中读取消息并推送至消息接收者,直至推送消息至消息接收者成功或达到预设的重试次数。
10.根据权利要求6所述的方法,其特征在于,若持久化存储中未处理的消息数量或者处理失败的消息数量超过预设阈值,则所述持久化存储对应的推送进程进行告警。
11.一种消息处理的装置,设置于消息中间件,其特征在于,该装置包括:
接收单元,用于接收消息;
第一写入单元,用于将所述接收单元接收到的消息写入消息队列和持久化存储;
第二写入单元,用于若消息写入消息队列和持久化存储均失败,则将该消息写入本地磁盘。
12.根据权利要求11所述的装置,其特征在于,所述第一写入单元,具体用于:
采用双写的方式将所述消息写入消息队列和持久化存储;或者,
将消息写入消息队列,若写入失败,则将所述消息写入持久化存储;或者,
将消息写入持久化存储,若写入失败,则将所述消息写入消息队列。
13.根据权利要求11所述的装置,其特征在于,该装置还包括:
第三写入单元,用于若所述第一写入单元写入持久化存储失败,写入消息队列成功,则将所述消息从消息队列回调并重新写入持久化存储。
14.根据权利要求13所述的装置,其特征在于,所述第二写入单元,还用于在所述第三写入单元重新写入持久化存储失败时,将所述消息写入本地磁盘。
15.根据权利要求11所述的装置,其特征在于,该装置还包括:
第四写入单元,用于将消息从本地磁盘回调并重新写入持久化存储。
16.根据权利要求11至15任一权项所述的装置,其特征在于,该装置还包括:第一推送单元和第二推送单元;
所述第一推送单元和第二推送单元以竞争模式分别从消息队列和持久化存储读取消息,并将读取到的消息推送至消息接收者;
所述竞争模式保证对于相同的消息而言,只有一个推送单元能够读取到该消息。
17.根据权利要求16所述的装置,其特征在于,所述第一推送单元和所述第二推送单元在分别从写入队列或持久化存储中读取消息时,具体执行:
判断该消息的被处理状态,若该消息正在被处理,或者已被处理成功,则不再对该消息进行处理;若该消息未被处理,或者被处理失败,则从该推送单元对应的写入队列或持久化存储中读取消息,并更新该消息的被处理状态为正在被处理。
18.根据权利要求17所述的装置,其特征在于,所述第一推送单元和所述第二推送单元,还用于:
若推送消息至消息接收者成功,则更新该消息的被处理状态为已被处理成功;
若读取消息或推送消息至消息接收者失败,则更新该消息的被处理状态为被处理失败。
19.根据权利要求16所述的装置,其特征在于,所述第二推送单元,还用于若从持久化存储中读取消息或推送消息至消息接收者失败,则按照预设的重试间隔,重新从所述持久化存储中读取消息并推送至消息接收者,直至推送消息至消息接收者成功或达到预设的重试次数。
20.根据权利要求16所述的装置,其特征在于,所述第二推送单元,还用于若持久化存储中未处理的消息数量或者处理失败的消息数量超过预设阈值,则进行告警。
CN201510903396.5A 2015-12-09 2015-12-09 一种消息处理的方法和装置 Pending CN105471714A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510903396.5A CN105471714A (zh) 2015-12-09 2015-12-09 一种消息处理的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510903396.5A CN105471714A (zh) 2015-12-09 2015-12-09 一种消息处理的方法和装置

Publications (1)

Publication Number Publication Date
CN105471714A true CN105471714A (zh) 2016-04-06

Family

ID=55609019

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510903396.5A Pending CN105471714A (zh) 2015-12-09 2015-12-09 一种消息处理的方法和装置

Country Status (1)

Country Link
CN (1) CN105471714A (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105959151A (zh) * 2016-06-22 2016-09-21 中国工商银行股份有限公司 一种高可用的流式处理系统及方法
CN107329858A (zh) * 2017-07-10 2017-11-07 上海哎媲媲网络技术有限公司 一种数据写入Redis失败的快速容错处理方法
CN108347476A (zh) * 2018-01-22 2018-07-31 广东欧珀移动通信有限公司 跨机房数据同步方法、装置以及服务器
CN109873904A (zh) * 2019-03-05 2019-06-11 平安科技(深圳)有限公司 消息推送的用户消息状态上报处理方法、装置及存储介质
CN110389844A (zh) * 2019-07-12 2019-10-29 辽宁途隆科技有限公司 基于Go语言的消息处理方法及装置、存储介质
CN110968431A (zh) * 2018-09-28 2020-04-07 阿里巴巴集团控股有限公司 一种消息处理方法、装置及设备
CN111026584A (zh) * 2019-12-23 2020-04-17 重庆紫光华山智安科技有限公司 一种解决键值数据库文件损坏的装置、方法和设备
CN112118352A (zh) * 2020-08-31 2020-12-22 京东数字科技控股股份有限公司 通知触发消息的处理方法和装置
CN112561534A (zh) * 2019-09-25 2021-03-26 浙江莲荷科技有限公司 订单处理方法、结算方法、程序、设备、系统及介质
CN113159858A (zh) * 2021-05-06 2021-07-23 山东白令三维科技有限公司 3d打印报价系统、方法、装置及存储介质
WO2022033586A1 (zh) * 2020-08-14 2022-02-17 网联清算有限公司 一种消息发送方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101510838A (zh) * 2009-02-26 2009-08-19 北京北纬点易信息技术有限公司 实现持久化数据队列的方法
CN102023974A (zh) * 2009-09-14 2011-04-20 中国移动通信集团公司 一种通过消息队列处理消息的方法、装置和系统
CN103051678A (zh) * 2012-12-04 2013-04-17 中国电信股份有限公司云计算分公司 一种高可靠性的数据通信方法和装置
CN105068769A (zh) * 2015-08-28 2015-11-18 浪潮软件股份有限公司 一种基于消息中间件的消息管理方法及装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101510838A (zh) * 2009-02-26 2009-08-19 北京北纬点易信息技术有限公司 实现持久化数据队列的方法
CN102023974A (zh) * 2009-09-14 2011-04-20 中国移动通信集团公司 一种通过消息队列处理消息的方法、装置和系统
CN103051678A (zh) * 2012-12-04 2013-04-17 中国电信股份有限公司云计算分公司 一种高可靠性的数据通信方法和装置
CN105068769A (zh) * 2015-08-28 2015-11-18 浪潮软件股份有限公司 一种基于消息中间件的消息管理方法及装置

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105959151B (zh) * 2016-06-22 2019-05-07 中国工商银行股份有限公司 一种高可用的流式处理系统及方法
CN105959151A (zh) * 2016-06-22 2016-09-21 中国工商银行股份有限公司 一种高可用的流式处理系统及方法
CN107329858A (zh) * 2017-07-10 2017-11-07 上海哎媲媲网络技术有限公司 一种数据写入Redis失败的快速容错处理方法
CN108347476A (zh) * 2018-01-22 2018-07-31 广东欧珀移动通信有限公司 跨机房数据同步方法、装置以及服务器
CN108347476B (zh) * 2018-01-22 2020-01-14 Oppo广东移动通信有限公司 跨机房数据同步方法、装置以及服务器
CN110968431A (zh) * 2018-09-28 2020-04-07 阿里巴巴集团控股有限公司 一种消息处理方法、装置及设备
CN110968431B (zh) * 2018-09-28 2023-06-20 阿里巴巴集团控股有限公司 一种消息处理方法、装置及设备
CN109873904B (zh) * 2019-03-05 2021-08-03 平安科技(深圳)有限公司 消息推送的用户消息状态上报处理方法、装置及存储介质
CN109873904A (zh) * 2019-03-05 2019-06-11 平安科技(深圳)有限公司 消息推送的用户消息状态上报处理方法、装置及存储介质
CN110389844A (zh) * 2019-07-12 2019-10-29 辽宁途隆科技有限公司 基于Go语言的消息处理方法及装置、存储介质
CN110389844B (zh) * 2019-07-12 2022-07-19 辽宁途隆科技有限公司 基于Go语言的消息处理方法及装置、存储介质
CN112561534A (zh) * 2019-09-25 2021-03-26 浙江莲荷科技有限公司 订单处理方法、结算方法、程序、设备、系统及介质
CN111026584A (zh) * 2019-12-23 2020-04-17 重庆紫光华山智安科技有限公司 一种解决键值数据库文件损坏的装置、方法和设备
WO2022033586A1 (zh) * 2020-08-14 2022-02-17 网联清算有限公司 一种消息发送方法及装置
CN112118352A (zh) * 2020-08-31 2020-12-22 京东数字科技控股股份有限公司 通知触发消息的处理方法和装置
CN113159858A (zh) * 2021-05-06 2021-07-23 山东白令三维科技有限公司 3d打印报价系统、方法、装置及存储介质

Similar Documents

Publication Publication Date Title
CN105471714A (zh) 一种消息处理的方法和装置
US9323470B2 (en) Synchronization for initialization of a remote mirror storage facility
US6779057B2 (en) Method, system, and program for indicating data transmitted to an input/output device as committed
CN102024044B (zh) 分布式文件系统
US7480918B2 (en) Duplicate message elimination during recovery when multiple threads are delivering messages from a message store to a destination queue
EP2908254A1 (en) Data redundancy implementation method and device
US10303560B2 (en) Systems and methods for eliminating write-hole problems on parity-based storage resources during an unexpected power loss
US8285997B2 (en) Backup apparatus with higher security and lower network bandwidth consumption
US10929231B1 (en) System configuration selection in a storage system
WO2005043530A2 (en) Method of recovering data
US8065557B2 (en) Apparatus for managing data backup
CN103890736A (zh) 灾难恢复期间的消息对账
CN104584006A (zh) 对消息传递上的附件的去重复以及对附件的自动修复
US7657533B2 (en) Data management systems, data management system storage devices, articles of manufacture, and data management methods
US8271968B2 (en) System and method for transparent hard disk drive update
CN111162880B (zh) 数据发送方法、装置、设备及存储介质
CN114637611A (zh) 基于消息队列的信息处理方法、装置及计算机设备
CN107852349B (zh) 用于多节点集群的事务管理的系统、方法及存储介质
CN108363635B (zh) 机器可读储存介质、修复卷的设备和方法
CN110737716A (zh) 一种数据写入的方法和装置
CN106776142B (zh) 一种数据存储方法以及数据存储装置
CN102523112A (zh) 信息处理方法及设备
US6510456B1 (en) Data transfer control method and system, data transfer control program file, and file storage medium
US20030033440A1 (en) Method of logging message activity
CN112882655A (zh) 数据缓存方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20160406