CN110968431B - 一种消息处理方法、装置及设备 - Google Patents

一种消息处理方法、装置及设备 Download PDF

Info

Publication number
CN110968431B
CN110968431B CN201811142226.XA CN201811142226A CN110968431B CN 110968431 B CN110968431 B CN 110968431B CN 201811142226 A CN201811142226 A CN 201811142226A CN 110968431 B CN110968431 B CN 110968431B
Authority
CN
China
Prior art keywords
message
queue
mark
data queue
target mark
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
Application number
CN201811142226.XA
Other languages
English (en)
Other versions
CN110968431A (zh
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.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding 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 Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201811142226.XA priority Critical patent/CN110968431B/zh
Publication of CN110968431A publication Critical patent/CN110968431A/zh
Application granted granted Critical
Publication of CN110968431B publication Critical patent/CN110968431B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本申请提供一种消息处理方法、装置及设备,该方法包括:将消息存储到数据队列,确定所述消息在所述数据队列中的位置信息;将所述消息发送给接收者,并确定所述消息对应的目标标记;将所述目标标记与所述位置信息的对应关系存储到操作队列;在处理所述数据队列中的消息时,基于所述消息在所述数据队列中的位置信息,从所述操作队列中获取与所述位置信息对应的目标标记;根据所述目标标记对所述消息进行处理。通过本申请的技术方案,对于消息的存储、更新、删除操作都是顺序追加到队列中,对于磁盘的操作是顺序读写,时间复杂度较低,可以充分利用磁盘带宽,实现极高的吞吐量。

Description

一种消息处理方法、装置及设备
技术领域
本申请涉及互联网技术领域,尤其涉及一种消息处理方法、装置及设备。
背景技术
中间件可以适用于需要可靠数据传送的分布式环境,在采用中间件的***中,不同的对象之间通过传递消息来激活对方的事件,完成相应的操作。具体的,发送者将消息发送给中间件,中间件将该消息转发给接收者。其中,中间件能够在不同的平台之间进行通信,中间件常被用来屏蔽掉各种平台及协议之间的特性,实现应用程序之间的协同,其优点在于能够在发送者与接收者之间提供同步和异步的连接,并且在任何时刻都可以进行消息的存储与转发。
发送者将消息发送给中间件后,中间件需要对消息进行持久化处理,如将消息存储到关系型数据库,然后将消息转发给接收者。这样,一旦消息未成功转发给接收者,则中间件从关系型数据库中读取该消息,并重新转发消息,以此类推,直到消息成功转发给接收者,中间件才从关系型数据库中删除该消息。
但是,在中间件对消息进行持久化处理时,是将消息存储到关系型数据库,而关系型数据库的成本较大,并会产生大量随机IO(输入输出),影响稳定性。
发明内容
本申请提供一种消息处理方法,所述方法包括:
将消息存储到数据队列,确定所述消息在所述数据队列中的位置信息;
将所述消息发送给接收者,并确定所述消息对应的目标标记;
将所述目标标记与所述位置信息的对应关系存储到操作队列;
在处理所述数据队列中的消息时,基于所述消息在所述数据队列中的位置信息,从所述操作队列中获取与所述位置信息对应的目标标记;
根据所述目标标记对所述消息进行处理。
本申请提供一种消息处理方法,所述方法包括:
将消息存储到数据队列,确定所述消息在所述数据队列中的位置信息;
将所述消息发送给接收者,并确定所述消息对应的目标标记;
根据所述位置信息和所述目标标记对所述消息进行处理。
本申请提供一种消息处理装置,所述装置包括:
确定模块,用于将消息存储到数据队列,确定所述消息在所述数据队列中的位置信息;将消息发送给接收者,并确定所述消息对应的目标标记;
存储模块,用于将所述目标标记与所述位置信息的关系存储到操作队列;
获取模块,用于在处理所述数据队列中的消息时,基于所述消息在所述数据队列中的位置信息,从所述操作队列中获取与所述位置信息对应的目标标记;
处理模块,用于根据所述目标标记对所述消息进行处理。
本申请提供一种消息处理装置,所述装置包括:
确定模块,用于将消息存储到数据队列,确定所述消息在所述数据队列中的位置信息;将消息发送给接收者,并确定所述消息对应的目标标记;
处理模块,用于根据所述位置信息和所述目标标记对所述消息进行处理。
本申请提供一种消息处理设备,包括:
处理器和机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述处理器执行所述计算机指令时进行如下处理:
将消息存储到数据队列,确定所述消息在所述数据队列中的位置信息;
将所述消息发送给接收者,并确定所述消息对应的目标标记;
将所述目标标记与所述位置信息的对应关系存储到操作队列;
在处理所述数据队列中的消息时,基于所述消息在所述数据队列中的位置信息,从所述操作队列中获取与所述位置信息对应的目标标记;
根据所述目标标记对所述消息进行处理。
本申请提供一种消息处理设备,包括:
处理器和机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述处理器执行所述计算机指令时进行如下处理:
将消息存储到数据队列,确定所述消息在所述数据队列中的位置信息;
将所述消息发送给接收者,并确定所述消息对应的目标标记;
根据所述位置信息和所述目标标记对所述消息进行处理。
基于上述技术方案,本申请实施例中,可以将消息存储到数据队列,确定消息在数据队列中的位置信息,将消息发送给接收者,并确定该消息对应的目标标记,并将目标标记与位置信息的对应关系存储到操作队列;然后,在处理数据队列中的消息时,基于消息在数据队列中的位置信息,从操作队列中获取与该位置信息对应的目标标记,并根据该目标标记对消息进行处理。
在上述方式中,在中间件对消息进行持久化处理时,是将消息存储到数据队列,而不是将消息存储到关系型数据库,从而避免关系型数据库的成本较大、产生大量随机IO、影响稳定性等问题。而且,上述方式可以实现可靠的消息推送,保障接收者能够接收到消息,对于消息的存储、更新、删除操作都是顺序追加到队列中,对于磁盘的操作是顺序读写,时间复杂度较低,可以充分利用磁盘带宽,实现极高的吞吐量,从而实现了低成本高性能的消息存储方案。
附图说明
为了更加清楚地说明本申请实施例或者现有技术中的技术方案,下面将对本申请实施例或者现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据本申请实施例的这些附图获得其它的附图。
图1是本申请一种实施方式中的应用场景示意图;
图2是本申请一种实施方式中的消息处理方法的流程图;
图3是本申请另一种实施方式中的消息处理方法的流程图;
图4是本申请一种实施方式中的消息处理装置的结构图;
图5是本申请另一种实施方式中的消息处理装置的结构图。
具体实施方式
在本申请实施例使用的术语仅仅是出于描述特定实施例的目的,而非限制本申请。本申请和权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,此外,所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
本申请实施例中提出了一种消息处理方法,该方法可以应用于包括发送者、中间件和接收者的***,例如,可以是需要可靠数据传送的分布式***,参见图1所示,为本实施例的应用场景示意图,在图1中,以1个发送者、1个中间件和3个接收者为例,实际应用中,发送者的数量还可以为其它数量,中间件的数量还可以为其它数量,接收者的数量还可以为其它数量,对此不做限制。
其中,发送者也可以称为生产者,是产生消息的客户端,可以将消息发送给中间件。例如,在分布式***中,发送者可以是商品交易平台,可以执行用户的订单、付款等操作,并生成与这些操作有关的消息,将消息发送给中间件。
其中,中间件也可以称为消息中间件,能够在不同平台之间进行通信,屏蔽平台及协议之间的特性,实现应用程序之间的协同,为各子***提供异步解耦,在发送者与接收者之间提供同步和异步的连接,进行消息的存储与转发。
其中,接收者也可以称为消费者或者订阅者,是用于消费发送者产生的消息的客户端,可以从中间件接收该消息,并根据该消息进行处理。例如,在分布式***中,接收者可以是物流平台,物流平台可以根据该消息确定物流状态;接收者可以是数据分析平台,数据分析平台可以根据该消息分析用户的个性化数据,继而利用个性化数据为用户提供更好的服务;接收者可以是积分处理平台,积分处理平台可以根据该消息为用户分配积分,从而使用户得到更好的业务体验。当然,上述只是接收者的几个示例,对此接收者的类型不做限制。
其中,针对在发送者、中间件和接收者之间传输的消息,可以包括消息头、消息体、消息属性、消息提交状态等内容,而消息体中携带的是实际数据,如商品标识、商品价格、买家信息、卖家信息等,对此消息携带的内容不做限制。
本实施例中,中间件可以维护数据队列(Data Queue)和操作队列(OperateQueue),数据队列可以包括但不限于采用顺序追加方式进行存储的队列,操作队列可以包括但不限于采用顺序追加方式进行存储的队列。例如,数据队列可以使用基于队列存储引擎的队列,操作队列也可以使用基于队列存储引擎的队列。当然,队列存储引擎只是一个示例,对此不做限制,数据队列和操作队列可以采用任何以顺序追加方式进行存储的队列实现,后续以队列存储引擎为例。
其中,队列存储引擎是一种提供队列数据结构的存储***,基于队列存储引擎的数据队列和操作队列,数据读写以顺序IO为主,也就是说,在向数据队列或操作队列中写入数据时,是将数据写入到数据队列或操作队列的尾部,在从数据队列或操作队列中读取数据时,是从数据队列或操作队列的首部读取。
其中,队列存储引擎可以包括但不限于:基于KAFKA(分布式的发布订阅消息***)的队列存储引擎,基于RocketMQ(分布式的消息中间件***)的队列存储引擎。当然,上述只是队列存储引擎的两个示例,对此不做限制。
本实施例中,数据队列和操作队列可以部署在不同的存储队列中,即,通过两个存储队列来实现数据队列和操作队列。或者,数据队列和操作队列可以部署在同一存储队列中,即,通过一个存储队列来实现数据队列和操作队列。
例如,中间件可以生成存储队列1和存储队列2,二者是两个不同的存储队列,并通过存储队列1实现数据队列,通过存储队列2实现操作队列,也就是说,后续针对数据队列的写入操作和读取操作,均是针对该存储队列1的操作,后续针对操作队列的写入操作和读取操作,均是针对该存储队列2的操作。
又例如,中间件可以生成存储队列A,并通过存储队列A实现数据队列和操作队列,也就是说,针对数据队列的写入操作和读取操作,是针对存储队列A的操作,针对操作队列的写入操作和读取操作,也是针对存储队列A的操作。
在通过一个存储队列实现数据队列和操作队列时,为了区分存储队列中的数据队列和操作队列,则存储队列还可以包括类型标记,该类型标记可以为数据类型或操作类型,数据类型表示存储队列中的数据队列,操作类型表示存储队列中的操作队列。也就是说,可以将上述存储队列A划分为两个部分,一部分是存储队列A1,存储队列A1表示存储队列A中的数据队列,可以通过数据类型表示存储队列A中的数据队列;另一部分是存储队列A2,存储队列A2表示存储队列A中的操作队列,可以通过操作类型表示存储队列A中的操作队列。
例如,每次向存储队列A中写入数据时,可以区分数据是写入到数据队列还是操作队列;若数据是写入到数据队列,则为数据添加数据类型,表示将数据写入到数据队列,即写入到存储队列A1中;若数据是写入到操作队列,则为数据添加操作类型,表示将数据写入到操作队列,即写入到存储队列A2中。
此外,在每次从存储队列A中读取数据时,还可以区分是从数据队列中读取数据,还是从操作队列中读取数据;若从该数据队列中读取数据,则可以读取具有数据类型的数据,从而表示从该数据队列中读取数据,即可以从存储队列A1中读取数据;若从该操作队列中读取数据,则可以读取具有操作类型的数据,从而表示从该操作队列中读取数据,即可以从存储队列A2中读取数据。
当然,通过一个存储队列实现数据队列和操作队列,或者,通过两个存储队列实现数据队列和操作队列,只是本申请的两个示例,对此不做限制,为了方便描述,以通过两个存储队列实现数据队列和操作队列为例进行说明。
在上述应用场景下,参见图2所示,为本申请实施例中的消息处理方法的流程图,该消息处理方法可以应用于中间件,该消息处理方法可以包括:
步骤201,将消息存储到数据队列,确定该消息在数据队列中的位置信息。
具体的,发送者将消息发送给中间件后,中间件可以对该消息进行持久化处理,在对该息进行持久化处理时,中间件并不是将该消息存储到关系型数据库中,而是将该消消息存储到数据队列中。此外,中间件还可以向发送者回复ACK(Acknowledgement,确认字符),表示中间件已经成功接收到该消息。
在一个例子中,中间件将消息存储到数据队列后,可以确定该消息在数据队列中的位置信息,如位置信息可以是位点。例如,假设数据队列中已经存在消息1-消息5,消息1的位置信息是位点96,消息2的位置信息是位点97,消息3的位置信息是位点98,消息4的位置信息是位点99,消息5的位置信息是位点100。此外,假设当前消息是消息6,则中间件将消息6存储到数据队列后,可以为消息6分配位点101,且消息6在数据队列中的位置信息是位点101。
其中,数据队列的位点范围可以是1-正无穷,每在数据队列中存储新消息,就可以在数据队列的最后一个消息的位点基础上加1,得到新位点,并将新位点作为新消息的位置信息。例如,在数据队列的最后一个消息5的位点100的基础上加1,得到位点101,并将位点101作为消息6在数据队列中的位置信息。
其中,数据队列的位点范围也可以是1-特定数值,如特定数值为1000,这样,消息的位置信息最大为位点1000,在位置信息为位点1000后,在将新消息存储到数据队列时,新消息的位置信息是位点1,即从头开始重新分配位点。
在这种情况下,特定数值可以大于等于数据队列中的最大消息数量,以保证数据队列中的每个消息具有不同的位点,即每个消息的位置信息可以不同。
其中,数据队列中的首个消息(即消息1)的位置信息是位点96,则说明位置信息是位点1-位点95的消息,已经被处理完成,并从数据队列中删除。
在上述实施例中,中间件将消息存储到数据队列时,是将该消息存储到数据队列的尾部。例如,假设数据队列中已经存在消息1-消息5,消息5是数据队列的最后一个消息,则当前消息是消息6时,将消息6存储到消息5的后面。
其中,本实施例中的消息,用于更新消息的任意字段,对此不做限制。
步骤202,将消息发送给接收者,并确定该消息对应的目标标记。
其中,发送者在将消息发送给中间件后,中间件还可以将该消息发送给接收者。在中间件将该消息发送给接收者时,不是从数据队列中读取消息,并将该消息发送给接收者,而是采用如下方式:中间件接收到消息后,将该消息存储到内存中,然后,从内存中读取该消息,将该消息存储到数据队列,从内存中读取该消息,并将该消息发送给接收者;然后,可以从内存中删除该消息。
其中,中间件将消息发送给接收者,可以包括但不限于:中间件从消息中解析出主题参数,通过该主题参数查询映射表,得到与该主题参数对应的接收者标识,然后,中间件可以将该消息发送给与该接收者标识对应的接收者。
例如,中间件可以在映射表中记录主题参数A与接收者标识1、接收者标识2和接收者标识3的对应关系,对此映射表的建立不做限制,只要映射表能够记录主题参数与接收者标识的对应关系即可。进一步的,假设消息中携带的主题参数为主题参数A,则中间件可以通过主题参数A查询所述映射表,得到与主题参数A对应的接收者标识1、接收者标识2和接收者标识3。然后,中间件可以将该消息发送给与接收者标识1对应的接收者1、将该消息发送给与接收者标识2对应的接收者2、将该消息发送给与接收者标识3对应的接收者3。
进一步的,若中间件在预设时间内接收到接收者1针对该消息返回的ACK,则确定接收者1的消息发送成功;若中间件在预设时间内接收到接收者2针对该消息返回的ACK,则确定接收者2的消息发送成功;若中间件在预设时间内未接收到接收者3针对该消息返回的ACK,则确定接收者3的消息发送失败。
在一个例子中,中间件将消息发送给接收者时,可以采用push(推送)方式或者pull(拉)方式,将消息发送给接收者。例如,在push方式中,中间件每次接收到发送者发送的消息,可以采用上述实施例的方式,将消息发送给接收者。在pull方式中,中间件接收到接收者的请求后,可以采用上述实施例的方式,将消息发送给接收者。当然,上述只是消息发送的示例,对此不做限制。
在一个例子中,确定消息对应的目标标记,可以包括但不限于:根据消息的发送情况确定该消息对应的目标标记。具体的,若该发送情况是消息发送成功(即所有接收者的消息均已经发送成功),则确定目标标记可以为删除标记。或者,若发送情况是消息发送失败(即任意一个或者多个接收者的消息发送失败),则确定目标标记可以为更新标记和接收者标识,其中,该接收者标识可以包括消息发送失败的接收者的标识。当然,上述只是确定目标标记的示例,对此不做限制,例如,在某些应用场景下,如无论消息发送成功或者失败,都需要对消息进行重传,则可以直接确定目标标记是更新标记和接收者标识。
例如,中间件将消息发送给接收者1、接收者2和接收者3后,若接收者1的消息发送成功、接收者2的消息发送成功、接收者3的消息发送成功,则可以确定发送情况是消息发送成功,并确定目标标记是删除标记,如标记RR。
若接收者1的消息发送成功、接收者2的消息发送成功、接收者3的消息发送失败,则可以确定发送情况是消息发送失败,并确定目标标记是更新标记(如标记SS)和接收者3的标识,但是不包括接收者1和接收者2的标识。
在一个例子中,中间件将消息发送给接收者,可以包括但不限于:发送者将消息A发送给中间件后,中间件将消息A存储到数据队列,并将消息A发送给接收者。或者,发送者将消息A发送给中间件后,中间件将消息A存储到数据队列,假设消息A的状态是prepare(准备)状态,则中间件当前不将消息A发送给接收者。若发送者在某个时间范围内,对消息A发起一次commit(共识)操作,则中间件可以将commit操作的信息写入到操作队列,并将消息A的状态更新为commit状态,然后,中间件将消息A发送给接收者。此外,若发送者在某个时间范围内,对消息A发起一次rollback(回滚)操作,则中间件可以将rollback操作的信息写入到操作队列,并将消息A的状态更新为rollback状态,这样,消息A就等价于被删除了,中间件不再将消息A发送给接收者。当然,上述只是中间件将消息发送给接收者的几个示例,对此不做限制。
步骤203,将该目标标记与该位置信息的对应关系存储到操作队列。
本实施例中,可以采用数据队列和操作队列来分离数据和操作,也就是说,可以将与数据有关的内容存储到数据队列,如将消息存储到数据队列,并将与操作有关的内容存储到操作队列,如将目标标记与位置信息存储到操作队列。
例如,在步骤201中,中间件将消息6存储到数据队列,并可以确定消息6在该数据队列中的位置信息是位点101;在步骤202中,若中间件确定目标标记是删除标记(如标记RR),则在步骤203中,中间件可以将位点101与删除标记的对应关系存储到操作队列中;或者,在步骤202中,若中间件确定目标标记是更新标记(如标记SS)和接收者3的标识,则在步骤203中,中间件可以将位点101、更新标记与接收者3的标识的对应关系存储到操作队列中。
步骤204,在处理该数据队列中的消息时,基于该消息在该数据队列中的位置信息(如位点等),从该操作队列中获取与该位置信息对应的目标标记。
具体的,可以从数据队列的首个消息开始,采用顺序处理方式,依次处理该数据队列中的每个消息;在处理该数据队列中的每个消息时,基于该消息在数据队列中的位置信息,从操作队列中获取与该位置信息对应的目标标记。
例如,中间件将消息6存储到数据队列后,数据队列中存在消息1-消息6,这些消息的顺序从前到后可以依次是:消息1、消息2、消息3、消息4、消息5和消息6,然后,从数据队列的首个消息(即消息1)开始,采用顺序处理方式,依次处理该数据队列中的每个消息,如先处理消息1,在消息1处理完成后,处理消息2,在消息2处理完成后,处理消息3,在消息3处理完成后,处理消息4,在消息4处理完成后,处理消息5,在消息5处理完成后,处理消息6,以此类推。由于每个消息的处理方式相同,后续以处理消息6为例进行说明。
在处理数据队列中的消息6时,基于消息6在数据队列中的位置信息(如位点101),可以从操作队列中获取与该位置信息对应的目标标记。具体的,由于操作队列用于存储位置信息与目标标记的对应关系,因此,基于位置信息(如位点101),可以从操作队列中获取与该位置信息对应的目标标记,如目标标记为删除标记(如标记RR),或者,更新标记(如标记SS)和接收者3的标识。
步骤205,根据该目标标记对消息进行处理。例如,在处理消息6时,在从操作队列中获取到目标标记后,就可以利用该目标标记对消息6进行处理。
在上述实施例中,步骤201-步骤203可以由同一个进程(如进程A)来实现,而步骤204-步骤205可以由另一个进程(如进程B)来实现,进程A和进程B是两个不同的进程,处理过程独立,即进程B的处理不依赖于进程A。
在一个例子中,根据该目标标记对消息进行处理,可以包括但不限于:
情况一、若目标标记为删除标记,则从该数据队列中删除该消息。
例如,在处理数据队列中的消息6时,若目标标记为删除标记(如标记RR),则可以从该数据队列中删除该消息6,至此,可以完成消息6的处理过程。
情况二、若目标标记为更新标记和接收者标识,则从该数据队列中删除该消息,并根据该消息生成更新消息,将该更新消息存储到数据队列,并将该更新消息发送给该接收者标识对应的接收者。然后,还可以确定该更新消息在数据队列中的更新位置信息,并根据该更新消息的发送情况确定更新目标标记,并将该更新位置信息与该更新目标标记的对应关系存储到操作队列中。
在一个例子中,将该更新消息存储到数据队列,还可以包括但不限于:将该更新消息追加存储到该数据队列的尾部,而不是替换该消息本身的位置。
例如,在处理数据队列中的消息6时,若目标标记为更新标记(如标记SS)和接收者3的标识,则可以从该数据队列中删除消息6,并根据消息6生成更新消息,后续将该更新消息称为消息7,消息7可以与消息6相同,也可以与消息6不同,对此不做限制,消息7是基于消息6生成的,而且,消息7可以是一条新消息,针对消息7重新执行上述步骤201-步骤205,不同之处在于:向目标标记中的接收者标识对应的接收者发送消息7,而不是向所有接收者发送消息7。
例如,可以将消息7追加存储到该数据队列的尾部,而不是替换消息6本身的位置,确定消息7在该数据队列中的位置信息(即上述更新位置信息,如位点125),基于目标标记中的接收者3的标识,将消息7发送给接收者3,而不再将消息7发送给接收者1和接收者2。然后,根据消息7的发送情况确定目标标记(即上述更新目标标记),具体确定方式参见步骤202,在此不再赘述。然后,将目标标记与位置信息的对应关系存储到操作队列;然后,针对消息7执行步骤204和步骤205,在此不再重复赘述。在执行步骤205时,若目标标记为更新标记和接收者标识,则从数据队列中删除该消息7,并根据该消息7生成更新消息,如消息8,针对消息8重新执行上述步骤201-步骤205,以此类推。
在一个例子中,上述执行顺序只是为了方便描述给出的一个示例,在实际应用中,还可以改变步骤之间的执行顺序,对此执行顺序不做限制。而且,在其它实施例中,并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其它实施例中可能被分解为多个步骤进行描述;本说明书中所描述的多个步骤,在其它实施例也可能被合并为单个步骤进行描述。
基于上述技术方案,本申请实施例中,在中间件对消息进行持久化处理时,是将消息存储到数据队列,而不是将消息存储到关系型数据库,从而避免关系型数据库的成本较大、产生大量随机IO、影响稳定性等问题。上述方式可以实现可靠的消息推送,保障接收者能够接收到消息,对于消息的存储、更新、删除操作都是顺序追加到队列中,对于磁盘的操作是顺序读写,时间复杂度较低,可以充分利用磁盘带宽,实现极高的吞吐量,从而实现了低成本高性能的消息存储方案。在上述方式中,中间件可以进行消息状态的维护,记录发送失败的接收者,定时进行消息重推,保障每个接收者就可以接收到消息。通过写时分离数据和操作,读时合并数据和操作,实现消息的更新,提高了吞吐量。
基于与上述方法同样的构思,本申请实施例提出另一种消息处理方法,参见图3所示,为该方法的流程图,该方法可以应用于中间件,该方法可以包括:
步骤301,将消息存储到数据队列,确定该消息在数据队列中的位置信息。
步骤302,将该消息发送给接收者,并确定该消息对应的目标标记。
步骤303,根据该位置信息和该目标标记对该消息进行处理。
其中,根据该位置信息和该目标标记对该消息进行处理,可以包括但不限于:将该目标标记与该位置信息的对应关系存储到操作队列;然后,在处理该数据队列中的消息时,基于该消息在数据队列中的位置信息,从操作队列中获取与该位置信息对应的目标标记;然后,根据该目标标记对该消息进行处理。
步骤301-步骤303的流程,可以参见上述步骤201-步骤205,在此不再赘述。
在一个例子中,上述执行顺序只是为了方便描述给出的一个示例,在实际应用中,还可以改变步骤之间的执行顺序,对此执行顺序不做限制。而且,在其它实施例中,并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其它实施例中可能被分解为多个步骤进行描述;本说明书中所描述的多个步骤,在其它实施例也可能被合并为单个步骤进行描述。
基于上述技术方案,本申请实施例中,在中间件对消息进行持久化处理时,是将消息存储到数据队列,而不是将消息存储到关系型数据库,从而避免关系型数据库的成本较大、产生大量随机IO、影响稳定性等问题。上述方式可以实现可靠的消息推送,保障接收者能够接收到消息,对于消息的存储、更新、删除操作都是顺序追加到队列中,对于磁盘的操作是顺序读写,时间复杂度较低,可以充分利用磁盘带宽,实现极高的吞吐量,从而实现了低成本高性能的消息存储方案。在上述方式中,中间件可以进行消息状态的维护,记录发送失败的接收者,定时进行消息重推,保障每个接收者就可以接收到消息。通过写时分离数据和操作,读时合并数据和操作,实现消息的更新,提高了吞吐量。
基于与上述方法同样的申请构思,本申请实施例还提供一种消息处理装置,如图4所示,为所述消息处理装置的结构图,所述装置可以包括:
确定模块41,用于将消息存储到数据队列,确定所述消息在所述数据队列中的位置信息;将消息发送给接收者,并确定所述消息对应的目标标记;
存储模块42,用于将所述目标标记与所述位置信息的关系存储到操作队列;
获取模块43,用于在处理所述数据队列中的消息时,基于所述消息在所述数据队列中的位置信息,从所述操作队列中获取所述位置信息对应的目标标记;
处理模块44,用于根据所述目标标记对所述消息进行处理。
所述确定模块41根据所述消息的发送情况确定目标标记时具体用于:
若所述发送情况是消息发送成功,则确定所述目标标记为删除标记;或者,
若所述发送情况是消息发送失败,则确定所述目标标记为更新标记和接收者标识,所述接收者标识包括消息发送失败的接收者的标识。
所述处理模块44确定所述消息对应的目标标记时具体用于:
根据所述消息的发送情况确定所述消息对应的目标标记;其中:
若所述目标标记为删除标记,则从所述数据队列中删除所述消息;或者,
若所述目标标记为更新标记和接收者标识,则从所述数据队列中删除所述消息,并根据所述消息生成更新消息,将所述更新消息存储到所述数据队列,并将所述更新消息发送给所述接收者标识对应的接收者;确定所述更新消息在所述数据队列中的更新位置信息;根据所述更新消息的发送情况确定更新目标标记;将所述更新位置信息与所述更新目标标记的对应关系存储到操作队列。
基于与上述方法同样的申请构思,本申请实施例还提供一种消息处理设备,包括:处理器和机器可读存储介质;其中,所述机器可读存储介质上存储有若干计算机指令,所述处理器执行所述计算机指令时进行如下处理:
将消息存储到数据队列,确定所述消息在所述数据队列中的位置信息;
将所述消息发送给接收者,并确定所述消息对应的目标标记;
将所述目标标记与所述位置信息的对应关系存储到操作队列;
在处理所述数据队列中的消息时,基于所述消息在所述数据队列中的位置信息,从所述操作队列中获取与所述位置信息对应的目标标记;
根据所述目标标记对所述消息进行处理。
本申请实施例还提供一种机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述计算机指令被执行时进行如下处理:
将消息存储到数据队列,确定所述消息在所述数据队列中的位置信息;
将所述消息发送给接收者,并确定所述消息对应的目标标记;
将所述目标标记与所述位置信息的对应关系存储到操作队列;
在处理所述数据队列中的消息时,基于所述消息在所述数据队列中的位置信息,从所述操作队列中获取与所述位置信息对应的目标标记;
根据所述目标标记对所述消息进行处理。
基于与上述方法同样的申请构思,本申请实施例还提供一种消息处理装置,如图5所示,为所述消息处理装置的结构图,所述装置可以包括:
确定模块51,用于将消息存储到数据队列,确定所述消息在所述数据队列中的位置信息;将消息发送给接收者,并确定所述消息对应的目标标记;
处理模块52,用于根据所述位置信息和所述目标标记对所述消息进行处理。
基于与上述方法同样的申请构思,本申请实施例还提供一种消息处理设备,包括:处理器和机器可读存储介质;其中,所述机器可读存储介质上存储有若干计算机指令,所述处理器执行所述计算机指令时进行如下处理:
将消息存储到数据队列,确定所述消息在所述数据队列中的位置信息;
将所述消息发送给接收者,并确定所述消息对应的目标标记;
根据所述位置信息和所述目标标记对所述消息进行处理。
本申请实施例还提供一种机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述计算机指令被执行时进行如下处理:
将消息存储到数据队列,确定所述消息在所述数据队列中的位置信息;
将所述消息发送给接收者,并确定所述消息对应的目标标记;
根据所述位置信息和所述目标标记对所述消息进行处理。
上述实施例阐明的***、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可以由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
而且,这些计算机程序指令也可以存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或者多个流程和/或方框图一个方框或者多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或者其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (13)

1.一种消息处理方法,其特征在于,所述方法包括:
将消息存储到数据队列,确定所述消息在所述数据队列中的位置信息;
将所述消息发送给接收者,并确定所述消息对应的目标标记;
将所述目标标记与所述位置信息的对应关系存储到操作队列;
在处理所述数据队列中的消息时,基于所述消息在所述数据队列中的位置信息,从所述操作队列中获取与所述位置信息对应的目标标记;
根据所述目标标记对所述消息进行处理;其中,所述根据所述目标标记对所述消息进行处理,包括:若所述目标标记为更新标记和接收者标识,则从所述数据队列中删除所述消息,并根据所述消息生成更新消息,将所述更新消息存储到所述数据队列,并将所述更新消息发送给所述接收者标识对应的接收者。
2.根据权利要求1所述的方法,其特征在于,
所述数据队列包括采用顺序追加方式进行存储的队列;
所述操作队列包括采用顺序追加方式进行存储的队列。
3.根据权利要求1所述的方法,其特征在于,
所述数据队列和所述操作队列部署在不同存储队列中;或者,
所述数据队列和所述操作队列部署在同一存储队列中,所述存储队列包括类型标记,所述类型标记为数据类型或者操作类型;所述数据类型表示所述存储队列中的数据队列,所述操作类型表示所述存储队列中的操作队列。
4.根据权利要求1所述的方法,其特征在于,
所述确定所述消息对应的目标标记,包括:
根据所述消息的发送情况确定所述消息对应的目标标记。
5.根据权利要求4所述的方法,其特征在于,
所述根据所述消息的发送情况确定所述消息对应的目标标记,包括:
若所述发送情况是消息发送成功,则确定所述目标标记为删除标记;
若所述发送情况是消息发送失败,则确定所述目标标记为更新标记和接收者标识,所述接收者标识包括消息发送失败的接收者的标识。
6.根据权利要求1所述的方法,其特征在于,
所述在处理所述数据队列中的消息时,基于所述消息在所述数据队列中的位置信息,从所述操作队列中获取与所述位置信息对应的目标标记,包括:
从所述数据队列的首个消息开始,采用顺序处理方式,依次处理所述数据队列中的每个消息;在处理所述数据队列中的消息时,基于所述消息在所述数据队列中的位置信息,从所述操作队列中获取与所述位置信息对应的目标标记。
7.根据权利要求1或5所述的方法,其特征在于,
所述根据所述目标标记对所述消息进行处理,包括:
若所述目标标记为删除标记,则从所述数据队列中删除所述消息。
8.根据权利要求1所述的方法,其特征在于,
所述将所述更新消息存储到所述数据队列,包括:
将所述更新消息追加存储到所述数据队列的尾部。
9.根据权利要求1所述的方法,其特征在于,
所述将所述更新消息存储到所述数据队列之后,所述方法还包括:
确定所述更新消息在所述数据队列中的更新位置信息;
根据所述更新消息的发送情况确定更新目标标记;
将所述更新位置信息与所述更新目标标记的对应关系存储到操作队列。
10.一种消息处理装置,其特征在于,所述装置包括:
确定模块,用于将消息存储到数据队列,确定所述消息在所述数据队列中的位置信息;将消息发送给接收者,并确定所述消息对应的目标标记;
存储模块,用于将所述目标标记与所述位置信息的关系存储到操作队列;
获取模块,用于在处理所述数据队列中的消息时,基于所述消息在所述数据队列中的位置信息,从所述操作队列中获取与所述位置信息对应的目标标记;
处理模块,用于根据所述目标标记对所述消息进行处理;
其中,所述处理模块根据所述目标标记对所述消息进行处理时具体用于:若所述目标标记为更新标记和接收者标识,则从所述数据队列中删除所述消息,并根据所述消息生成更新消息,将所述更新消息存储到所述数据队列,并将所述更新消息发送给所述接收者标识对应的接收者。
11.根据权利要求10所述的装置,其特征在于,
所述确定模块确定所述消息对应的目标标记时具体用于:
根据所述消息的发送情况确定所述消息对应的目标标记;其中:
若所述发送情况是消息发送成功,则确定所述目标标记为删除标记;或者,
若所述发送情况是消息发送失败,则确定所述目标标记为更新标记和接收者标识,所述接收者标识包括消息发送失败的接收者的标识。
12.根据权利要求10或11所述的装置,其特征在于,
所述处理模块根据所述目标标记对所述消息进行处理时具体用于:若所述目标标记为删除标记,则从所述数据队列中删除所述消息;
所述处理模块将所述更新消息发送给所述接收者标识对应的接收者之后还用于:确定所述更新消息在所述数据队列中的更新位置信息;根据所述更新消息的发送情况确定更新目标标记;将所述更新位置信息与所述更新目标标记的对应关系存储到操作队列。
13.一种消息处理设备,其特征在于,包括:
处理器和机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述处理器执行所述计算机指令时进行如下处理:
将消息存储到数据队列,确定所述消息在所述数据队列中的位置信息;
将所述消息发送给接收者,并确定所述消息对应的目标标记;
将所述目标标记与所述位置信息的对应关系存储到操作队列;
在处理所述数据队列中的消息时,基于所述消息在所述数据队列中的位置信息,从所述操作队列中获取与所述位置信息对应的目标标记;
根据所述目标标记对所述消息进行处理;其中,所述根据所述目标标记对所述消息进行处理,包括:若所述目标标记为更新标记和接收者标识,则从所述数据队列中删除所述消息,并根据所述消息生成更新消息,将所述更新消息存储到所述数据队列,并将所述更新消息发送给所述接收者标识对应的接收者。
CN201811142226.XA 2018-09-28 2018-09-28 一种消息处理方法、装置及设备 Active CN110968431B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811142226.XA CN110968431B (zh) 2018-09-28 2018-09-28 一种消息处理方法、装置及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811142226.XA CN110968431B (zh) 2018-09-28 2018-09-28 一种消息处理方法、装置及设备

Publications (2)

Publication Number Publication Date
CN110968431A CN110968431A (zh) 2020-04-07
CN110968431B true CN110968431B (zh) 2023-06-20

Family

ID=70027035

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811142226.XA Active CN110968431B (zh) 2018-09-28 2018-09-28 一种消息处理方法、装置及设备

Country Status (1)

Country Link
CN (1) CN110968431B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111970091A (zh) * 2020-08-06 2020-11-20 北京浪潮数据技术有限公司 一种通信方法、***、设备及计算机可读存储介质
CN111988391A (zh) * 2020-08-14 2020-11-24 网联清算有限公司 一种消息发送方法及装置
CN112134938B (zh) * 2020-09-09 2022-08-26 重庆易宠科技有限公司 一种消息处理方法、装置、终端及计算机可读存储介质
CN112069438B (zh) * 2020-09-10 2023-12-22 北京五八信息技术有限公司 消息合并方法、消息处理方法和装置、设备和介质
CN112286973B (zh) * 2020-11-19 2022-09-30 每日互动股份有限公司 数据消息的存储方法、装置、计算机设备及存储介质
CN113296976A (zh) * 2021-02-10 2021-08-24 阿里巴巴集团控股有限公司 消息处理方法、装置、电子设备、存储介质及程序产品
CN112925642A (zh) * 2021-02-25 2021-06-08 百果园技术(新加坡)有限公司 一种延迟消息处理方法、装置、设备及存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102469033A (zh) * 2010-11-01 2012-05-23 阿里巴巴集团控股有限公司 一种消息订阅***以及消息发送方法
CN104731912A (zh) * 2015-03-24 2015-06-24 浪潮集团有限公司 一种消息中间件mq的消息传输方法和装置
CN105242975A (zh) * 2015-08-27 2016-01-13 浪潮软件股份有限公司 一种消息传输的方法和消息中间件
CN105471714A (zh) * 2015-12-09 2016-04-06 百度在线网络技术(北京)有限公司 一种消息处理的方法和装置
CN107133302A (zh) * 2017-04-28 2017-09-05 努比亚技术有限公司 实现数据一致性的方法、***、终端及计算机可读存储介质
CN108009027A (zh) * 2017-11-23 2018-05-08 北京百度网讯科技有限公司 队列消息一致性的实现方法、装置、设备及存储介质
CN108170545A (zh) * 2018-01-08 2018-06-15 北京奇艺世纪科技有限公司 一种基于消息中间件的消息传输方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8577976B2 (en) * 2010-04-27 2013-11-05 International Business Machines Corporation Application of system level policy in message oriented middleware

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102469033A (zh) * 2010-11-01 2012-05-23 阿里巴巴集团控股有限公司 一种消息订阅***以及消息发送方法
CN104731912A (zh) * 2015-03-24 2015-06-24 浪潮集团有限公司 一种消息中间件mq的消息传输方法和装置
CN105242975A (zh) * 2015-08-27 2016-01-13 浪潮软件股份有限公司 一种消息传输的方法和消息中间件
CN105471714A (zh) * 2015-12-09 2016-04-06 百度在线网络技术(北京)有限公司 一种消息处理的方法和装置
CN107133302A (zh) * 2017-04-28 2017-09-05 努比亚技术有限公司 实现数据一致性的方法、***、终端及计算机可读存储介质
CN108009027A (zh) * 2017-11-23 2018-05-08 北京百度网讯科技有限公司 队列消息一致性的实现方法、装置、设备及存储介质
CN108170545A (zh) * 2018-01-08 2018-06-15 北京奇艺世纪科技有限公司 一种基于消息中间件的消息传输方法和装置

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
He Ming Yao Department of Electrical and Electronic Engineering, The University of Hong Kong, Hong Kong等.Machine learning based method of moments (ML-MoM).2017 IEEE International Symposium on Antennas and Propagation & USNC/URSI National Radio Science Meeting.2017,全文. *
史冬冬.云队列:一个基于Hadoop的大规模消息基础平台.中国优秀硕士学位论文全文数据库 信息科技辑.2012,(第07期),全文. *
汪添生;尉双梅;崔蔚;刘迪;何金陵;孙琦.支持MongoDB的事务管理方案研究.计算机***应用.2017,第26卷(第07期),全文. *
许静;牟艳;秦江龙.竞赛数据交换平台的研究与实现.微处理机.2012,第33卷(第06期),全文. *

Also Published As

Publication number Publication date
CN110968431A (zh) 2020-04-07

Similar Documents

Publication Publication Date Title
CN110968431B (zh) 一种消息处理方法、装置及设备
EP2998863B1 (en) Converting a serial transaction schedule to a parallel transaction schedule
CN101686209B (zh) 消息转发***中存储消息的方法和装置
US20030158892A1 (en) Apparatus and method for exchanging data between two devices
CN110968586B (zh) 分布式事务处理方法及装置
US20150113076A1 (en) Message thread identification and management
CN106844662B (zh) 即时消息阅读状态的记录方法及装置
CN104618432B (zh) 一种事件发送与接收的处理方法和处理***
US9992147B2 (en) During an email migration, converting distribution list messages into single-instanced content within a collaboration platform group
CN106326499A (zh) 一种数据处理方法及装置
CN101571811B (zh) 一种信息传输方法及装置
CN112152872A (zh) 一种网络亚健康检测方法及装置
CN110071968A (zh) 一种基于区块链的消息存储方法及装置
CN108234277A (zh) 一种邮件发送、编辑的方法以及装置
CN114721755A (zh) 待办事务消息处理方法、装置与存储介质
US20130054710A1 (en) Categorizing email recipients into logical groups when sending a mass email
CN111984429A (zh) 基于消息队列的通信方法及装置
CN111078425B (zh) 消息处理方法、装置、存储介质及电子设备
US20150365365A1 (en) Method and apparatus for modifying message
CN110830361B (zh) 邮件数据存储方法及装置
CN108694219B (zh) 一种数据处理方法及装置
CN110162415B (zh) 用于处理数据请求的方法、服务器、装置及存储介质
CN108632128A (zh) 一种电子邮件跟踪方法和装置
AU2018280855B2 (en) Multi-standard message processing
CN107835124B (zh) 邮件发送方法、装置及***

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