本发明专利技术实施例公开了一种通过消息队列处理消息的方法,包括以下步骤:接收来自消息生产设备的消息,将所述消息发送到内存中的第一消息队列,并根据所述消息中的标记位将所述消息添加到数据库中;将所述数据库中的消息发送到内存中的第二消息队列,所述第二消息队列用于存储供消息使用设备获取并处理的消息;接收所述消息使用设备处理过的消息,将所述消息发送到所述第一消息队列中,并根据所述处理过的消息的标记位从所述数据库中删除或修改所述处理过的消息。本发明专利技术实施例兼顾了消息队列的性能和可靠性。本发明专利技术实施例同样公开了一种应用上述方法的装置和系统。
【技术实现步骤摘要】
本专利技术涉及互联网
,尤其涉及一种通过消息队列处理消息的方法、装 置和系统。
技术介绍
在数据业务技术中,消息是指在两台计算机间传送的数据单位,可以非常简 单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。消息队列是在消息的 传输过程中保存消息的容器,是一种分布式应用间交换信息的消息处理技术,可驻留在 内存或磁盘上,主要用于提供路由并保证消息的传递,为任何应用程序提供消息处理和 消息队列功能,无论该应用程序所在的计算机是否在同一个网络上或者是否同时联机。 如果发送消息时接收者不可用,消息队列会保留消息,直到该消息被应用程序读走。通 过消息队列,应用程序可独立地访问消息,而不需要知道消息之间的位置关系,且消息 队列在继续执行后续步骤之前,不需要等待接收程序接收消息。消息队列为构造以同步或异步方式实现的分布式应用提供了松耦合方法,消息 队列的API (Application Programming Interface,应用程序编程接口 )调用被嵌入到新的或现存的应用中,通过消息发送到基于内存或磁盘的消息队列中。消息队列可用在应用中 以执行多种功能,比如要求服务、交换信息或异步处理等。衡量消息队列是否优秀的标准包括性能和可靠性,应用于大规模的分布式系统 的消息队列,消息量巨大,因此,对消息队列的性能要求非常高,要求有高并发和高吞 吐量。为满足高效率的要求,现有技术通常使用的是内存消息队列,消息保存在内存 中,以保证消息处理速度;为实现可靠性,一些消息队列使用内存消息队列+文件系统 的方式实现消息的持久化,或者完全使用数据库来实现消息队列;还有一些消息队列使 用内存消息队列+数据库的方式实现消息的持久化,但并没有采用触发式方式在消息队 列和数据库之间实现消息同步。专利技术人在实现本专利技术的过程中,发现现有技术至少存在以下缺陷内存消息队列降低了系统的可靠性,一旦出现掉电、意外死机,或者程序崩溃 等情况,无法保证消息的完整性,还可能丢掉大量未来得及处理的消息;而使用内存消 息队列+文件系统或内存消息队列+数据库的方式实现消息的持久性时,效率很低,而且 实现复杂,不易使用。
技术实现思路
本专利技术实施例提供了一种通过消息队列处理消息的方法、装置和系统,用于兼 顾消息队列的性能和可靠性。本专利技术实施例提供了一种通过消息队列处理消息的方法,包括以下步骤接收来自消息生产设备的消息,将所述消息发送到内存中的第一消息队列,并 根据所述消息中的标记位将所述消息添加到数据库中;将所述数据库中的消息发送到内存中的第二消息队列,所述第二消息队列用于存储供消息使用设备获取并处理的消息;接收所述消息使用设备处理过的消息,将所述消息发送到所述第一消息队列 中,并根据所述处理过的消息的标记位从所述数据库中删除或修改所述处理过的消息。本专利技术实施例还提供了一种消息队列服务器,包括收发模块,用于接收来自消息生产设备的消息,将所述消息发送到内存中的第 一消息队列,并接收消息使用设备处理过的消息,将所述处理过的消息发送到所述第一 消息队列中;数据库模块,用于存储消息,并将所述消息发送到内存中的第二消息队列;添加模块,与所述数据库模块和所述收发模块连接,用于根据所述收发模块发 送到所述第一消息队列中的来自所述消息生产设备的消息的标记位,将所述消息添加到 所述数据库模块中;修改模块,与所述收发模块和所述数据库模块连接,用于根据所述收发模块发 送到所述第一消息队列中的所述消息使用设备处理过的消息的标记位,将所述处理过的 消息从所述数据库模块中删除或者在所述数据库模块中修改所述处理过的消息。本专利技术实施例还提供了一种通过消息队列处理消息的系统,包括消息生产设 备、消息队列服务器和消息使用设备,所述消息生产设备,用于生成消息,并将所述消息发送到所述消息队列服务 器;所述消息队列服务器,用于接收来自所述消息生产设备的消息,将所述消息发 送到内存中的第一消息队列,并根据所述消息中的标记位将所述消息添加到数据库中; 将所述数据库中的消息发送到内存中的第二消息队列,使消息使用设备获取并处理所述 消息;接收所述消息使用设备处理过的消息,将所述消息发送到所述第一消息队列中, 并根据所述处理过的消息的标记位从所述数据库中删除或修改所述消息;所述消息使用设备,用于从所述第二消息队列中获取并处理消息,将处理完毕 的消息添加标记位,并发送到所述第一消息队列。与现有技术相比,本专利技术实施例具有以下优点利用内存消息队列高并发和 高吞吐量的优点,提高了处理消息的效率,并保证了数据的可靠性,完全保留了数据库 的事务性优点,除了完成消息的分发和传递,还保留消息的处理结果,随时可供其他用 途;由于消息实时的保存在数据库,而数据库可以很方便的进行各种操作,便于跟踪当 前消息队列的使用情况,发现故障和进行优化。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对本专利技术实 施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附 图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性 的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术实施例中的一种通过消息队列处理消息的方法流程图;图2为本专利技术实施例应用场景中的一种通过消息队列处理消息的系统结构示意图;图3为本专利技术实施例应 用场景中的通过消息队列处理消息的流程图;图4为本专利技术实施例中的一种消息队列服务器的结构示意图;图5为本专利技术实施例应用场景中的消息队列服务器的结构示意图;图6为本专利技术实施例中的一种通过消息队列处理消息的系统结构示意图。具体实施例方式本专利技术实施例提供的技术方案中,通过触发来实现数据库和消息队列之间的同 步,利用内存消息队列的高性能和数据库的高可靠性,将内存消息队列和数据可的优点 结合起来,实现了一种以数据库作为持久化工具的消息队列,解决了性能和可靠性问题。下面将结合本专利技术实施例中的附图,对本专利技术实施例的技术方案进行清楚、完 整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于 本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其 他实施例,都属于本专利技术保护的范围。如图1所示,为本专利技术实施例中的一种通过消息队列处理消息的方法流程图, 包括以下步骤步骤101,接收来自消息生产设备的消息,将该消息发送到内存中的第一消息队 列,并根据消息中的标记位将该消息添加到数据库中。步骤102,将数据库中的消息发送到内存中的第二消息队列。其中,第二消息队列用于存储供消息使用设备获取并处理的消息。步骤103,接收消息使用设备处理过的消息,将该消息发送到第一消息队列中, 并根据该处理过的消息的标记位从数据库中删除或修改该处理过的消息。如图2所示,为本专利技术实施例应用场景中的一种通过消息队列处理消息的系 统结构示意图,该系统包括消息生产设备100、第一消息队列200、事务处理服务程序 300、数据库和数据库触发器400、触发器外部过程500、第二消息队列600和消息使用设 备700。其中,第一消息队列200、事务处理服务程序300、数据库400 (包括数据库触发 器)、触发器外部过程500和第二消息队列600组成完整的触发式数据库持久化的消本文档来自技高网...
【技术保护点】
一种通过消息队列处理消息的方法,其特征在于,包括:接收来自消息生产设备的消息,将所述消息发送到内存中的第一消息队列,并根据所述消息中的标记位将所述消息添加到数据库中;将所述数据库中的消息发送到内存中的第二消息队列,所述第二消息队列用于存储供消息使用设备获取并处理的消息;接收所述消息使用设备处理过的消息,将所述消息发送到所述第一消息队列中,并根据所述处理过的消息的标记位从所述数据库中删除或修改所述处理过的消息。
【技术特征摘要】
【专利技术属性】
技术研发人员:王磊,范晓晖,刘越,于蓉蓉,郑冬冬,
申请(专利权)人:中国移动通信集团公司,
类型:发明
国别省市:11[中国|北京]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。