CN113296973A - 一种消息处理方法、消息读取方法、装置及可读介质 - Google Patents

一种消息处理方法、消息读取方法、装置及可读介质 Download PDF

Info

Publication number
CN113296973A
CN113296973A CN202010700917.8A CN202010700917A CN113296973A CN 113296973 A CN113296973 A CN 113296973A CN 202010700917 A CN202010700917 A CN 202010700917A CN 113296973 A CN113296973 A CN 113296973A
Authority
CN
China
Prior art keywords
message
queue
processed
target
identity 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.)
Pending
Application number
CN202010700917.8A
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.)
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 CN202010700917.8A priority Critical patent/CN113296973A/zh
Publication of CN113296973A publication Critical patent/CN113296973A/zh
Pending legal-status Critical Current

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

一种消息处理方法、消息读取方法、装置及可读介质
技术领域
本申请涉及网络技术领域,特别是涉及一种消息处理方法、消息读取方法、装置及可读介质。
背景技术
随着科技的不断发展,市面上应用的数量、应用所提供的功能越来越多。在用户使用应用的过程中,应用往往会产生大量的消息。由于这些消息可以体现用户的使用习惯,使用喜好等因素,因此,这些消息对于应用提供方往往具有重要的意义。
目前,亟需一种消息处理方法,来实现存储这些消息,以方便后续使用。
发明内容
鉴于上述问题,本申请实施例提供一种消息处理方法、消息读取方法、装置及可读介质,以实现消息存储。
为了解决上述问题,本申请实施例公开了一种消息处理方法,包括:获取至少两个消息发送端的待处理消息及所述待处理消息对应的身份信息;
根据所述身份信息,将所述待处理消息存储至与所述身份信息对应的物理队列;其中,所述消息发送端的数量大于所述物理队列的数量。
本申请实施例还公开了一种消息读取方法,包括:
接收消息接收端发送的消息读取请求;所述消息读取请求中包括目标消息的身份信息;
根据所述身份信息,从物理队列中读取与所述身份信息对应的目标消息;其中,所述物理队列中存储有至少两个消息发送端发送的待处理消息;其中,所述消息发送端的数量大于所述物理队列的数量。
本申请实施例还公开了一种消息处理方法,包括:
获取至少两个消息发送端的待处理消息及所述待处理消息对应的身份信息;所述身份信息包括所述待处理消息所属消息发送端所对应的逻辑队列标识;
根据所述逻辑队列标识,在索引中确定所述待处理消息的第一存储位置;其中,所述索引中按所述逻辑队列标识分类记录有物理队列中的消息的存储位置;
根据所述第一存储位置,将所述待处理消息以双向链表的形式,存储至与所述逻辑队列标识对应的所述物理队列;其中,属于同一逻辑队列标识的待处理消息在同一个双向链表中,所述消息发送端的数量大于所述物理队列的数量。
本申请实施例还公开了一种消息处理装置,包括:
获取模块,用于获取至少两个消息发送端的待处理消息及所述待处理消息对应的身份信息;
第一存储模块,用于根据所述身份信息,将所述待处理消息存储至与所述身份信息对应的物理队列;其中,所述消息发送端的数量大于所述物理队列的数量。
本申请实施例还公开了一种消息处理装置,包括:
获取模块,用于获取至少两个消息发送端的待处理消息及所述待处理消息对应的身份信息;所述身份信息包括所述待处理消息所属消息发送端所对应的逻辑队列标识;
确定模块,用于根据所述逻辑队列标识,在索引中确定所述待处理消息的第一存储位置;其中,所述索引中按所述逻辑队列标识分类记录有物理队列中的消息的存储位置;
存储模块,用于根据所述第一存储位置,将所述待处理消息以双向链表的形式,存储至与所述逻辑队列标识对应的所述物理队列;其中,属于同一逻辑队列标识的待处理消息在同一个双向链表中,所述消息发送端的数量大于所述物理队列的数量。
本申请实施例还公开了一种消息读取装置,包括:
获取模块,用于接收消息接收端发送的消息读取请求;所述消息读取请求中包括目标消息的身份信息;
读取模块,用于根据所述身份信息,从物理队列中读取与所述身份信息对应的目标消息;其中,所述物理队列中存储有至少两个消息发送端发送的待处理消息;其中,所述消息发送端的数量大于所述物理队列的数量。
相应的,本申请实施例还公开了一种装置,包括:
一个或多个处理器;和
其上存储有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述装置执行上述方法。
相应的,本申请实施例还公开了一个或多个机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得装置执行上述方法。
本申请实施例包括以下优点:本申请提供的一种消息处理方法,包括:获取至少两个消息发送端的待处理消息及所述待处理消息对应的身份信息,根据所述身份信息,将所述待处理消息存储至与所述身份信息对应的物理队列;其中,所述消息发送端的数量大于所述物理队列的数量。本申请中,通过多个消息发送端共享物理队列,可以降低对硬件介质的耗费,进而减少硬件开销。
附图说明
图1A是本申请一实施例的一种实现架构图;
图1B是本申请一实施例的一种场景示意图;
图1C是本申请一实施例的另一种场景示意图;
图2是本申请一实施例的一种逻辑框架示意图;
图3是本申请一实施例提供的一种消息处理方法的步骤流程图;
图4A是本申请一实施例提供的一种消息处理方法的具体步骤流程图;
图4B是本申请一实施例提供的一种物理队列及索引示意图;
图4C是本申请一实施例提供的一种逻辑队列角度的消息处理示意图;
图5是本申请一实施例提供的一种消息读取方法的步骤流程图;
图6是本申请一实施例提供的另一种消息处理方法的步骤流程图;
图7是本申请一实施例提供的一种消息处理装置的结构图
图8是本申请一实施例提供的另一种消息处理装置的结构图;
图9是本申请一实施例提供的一种消息读取装置的结构图;
图10是本申请另一实施例提供的一种装置的结构示意图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
为使本领域技术人员更好地理解本申请,以下对本申请涉及的概念进行说明:
消息发送端:需要在物理队列中持久化存储的待处理消息的来源,消息发送端可以为运行有服务的设备,例如,消息发送端可以为运行有服务的服务器。消息发送端也可以为服务,例如,一个消息发送端可以为一个服务。
服务:用于提供应用中功能,为了便于对服务进行划分,一般会将一个服务产生的消息作为同一数据种类的消息,同一服务产生的消息属于同一逻辑队列。
持久化存储:可以保证断电等场景不会导致所存储的数据丢失的存储方式。
物理队列:依托独立且断电不会丢失数据的硬件介质,例如,磁盘,所建立的队列。
逻辑队列:不同逻辑队列对应不同的逻辑队列标识,一个逻辑队列标识唯一指示一个逻辑队列,属于同一逻辑队列标识的消息,组成该逻辑队列标识表示的逻辑队列。
参照图1A,其示出了本申请一实施例的一种实现架构图,该实现架构中包括:服务器S110、服务器S120以及服务器S130。其中,服务器S110中运行有服务a,服务器S120中运行有服务b,服务器S130中包括物理队列c。服务器S110及服务器S120作为消息发送端,服务器S130可以执行步骤1.1及步骤1.2来获取服务器S110及服务器S120的待处理消息及待处理消息对应的身份信息。进一步地,服务器S130可以执行步骤1.3根据身份信息,将待处理消息存储到物理队列c中。
在该实现架构中,消息发送端的数量为2,物理队列的数量为1,即,消息发送端的数量大于物理队列的数量。这样,实现了多个消息发送端共享同一物理队列,即,多个服务共享物理队列共享物理队列、多个逻辑队列共享物理队列。由于物理队列需要依托独立且断电不会丢失数据的硬件介质来建立,因此,通过共享物理队列可以降低对硬件介质的耗费,进而减少硬件开销。
在一种现有实现方式中,由于不同服务用于提供应用中的不同功能,为了对服务进行优化、分析,往往会从存储的消息中获取服务对应的消息进行数据分析。因此,为了方便获取服务对应的消息,往往会针对一个服务建立一个物理队列进行存储,而一个物理队列往往会对应一个物理队列文件。这样,在面对大量的服务时,就需要建立大量的物理队列,进而会导致出现大量的物理队列文件。但是,一个硬件设备所能支持的物理队列文件的数量是有限的,这样,在面对大量的服务时,就需要不断增加硬件设备。
由于增加大量硬件设备的成本较大,因此,本申请实施例中采用多个服务共享物理队列,这样,在面对大量的服务时,无需增加大量的物理队列即可满足存储需求,如果出现新的服务,本申请实施例可以将该新的服务的消息放到某个物理队列中进行存储,这样,一定程度上可以减少所需增加的物理队列的数量,进而降低硬件开销。
进一步地,服务器S130在获取待处理消息时,可以是接收服务器S110及服务器S120发送的待处理消息。服务器S110的待处理消息可以是服务a产生的、服务器S120的待处理消息可以是服务b产生的。其中,服务产生的消息可以是在终端设备所安装应用中该服务所提供的功能被使用时生成的。
参照图1B,其示出了本申请一实施例的一种场景示意图,该场景中,终端设备S140中安装有具有服务a所提供功能、服务b所提供功能的应用d。用户可以使用具有服务a所提供功能、服务b所提供功能的应用d,相应地,终端设备S140可以将使用过程中所产生的消息对应返回给服务器S110、服务器S120。服务器S110、服务器S120可以将这些消息作为待处理消息,将待处理消息及待处理消息对应的身份信息,发送给服务器S130。服务器S130可以将根据身份信息,将待处理消息存储至对应的物理队列c中。
由于终端设备的数量往往较为庞大,这样,终端设备所安装应用中服务所提供功能被使用时生成的消息往往较多。因此,本申请实施例中,由终端设备将生成的消息返回给对应的服务所在的服务器S110、服务器S120,由该服务器S110、服务器S120将待处理消息发送给服务器S130进行存储,可以服务器避免S130的消息并发量过大的问题。例如,服务器S110和服务器S120可以根据接收到的终端设备返回的消息的数量,进行负载均衡,进而控制并发量。
参照图1C,其示出了本申请一实施例的另一种场景示意图,该场景中,终端设备S140中安装有具有支付服务所提供功能、下单服务所提供功能及聊天服务所提供功能的应用e,用户可以使用应用e中具备的功能。相应地,终端设备S140可以将使用过程中所产生的消息对应返回给服务器S110、服务器S120及服务器S150。服务器S110、服务器S120及服务器S150可以将这些消息作为待处理消息,将待处理消息及待处理消息对应的身份信息,发送给服务器S130。服务器S130可以将根据身份信息,将待处理消息存储至对应的物理队列c中。本申请实施例中,针对支付服务、下单服务及聊天服务的消息,由终端设备将生成的消息返回给对应的服务所在的服务器,由这些服务器将待处理消息发送给服务器S130进行存储,可以服务器避免S130的消息并发量过大的问题。
参照图2,其示出了本申请一实施例的一种逻辑框架示意图,该逻辑框架中可以包括:服务S210、服务S220、服务S230、服务S240、物理队列S250及物理队列S260。其中,服务S210、服务S220、服务S230、服务S240为消息发送端。在进行消息处理时,可以将服务S210的待处理消息、服务S220的待处理消息存储至物理队列250中,将服务S230的待处理消息、服务S240的待处理消息存储物理队列260中。由于消息发送端的数量大于物理队列的数量。这样,实现了多个消息发送端共享物理队列。由于物理队列需要依托独立且断电不会丢失数据的硬件介质来建立,相较于一个服务使用一个物理队列的方式,通过共享物理队列可以降低对硬件介质的耗费,进而减少硬件开销。
参照图3,示出了本申请实施例的一种消息处理方法的步骤流程图。该方法具体可以包括如下步骤:
步骤101,获取至少两个消息发送端的待处理消息及所述待处理消息对应的身份信息。
在本申请实施例中,待处理消息可以是需要在物理队列中存储的消息。身份信息可以是用于表征待处理消息属于哪个消息发送端的信息。待处理消息及待处理消息对应的身份信息可以是由消息发送端主动发送的,相应地,获取时,可以接收消息发送端发送的待处理消息及待处理消息对应的身份信息。或者,也可以主动从消息发送端处读取。
步骤102,根据所述身份信息,将所述待处理消息存储至与所述身份信息对应的物理队列;其中,所述消息发送端的数量大于所述物理队列的数量。
在本申请实施例中,可以预先设定消息发送端与物理队列之间的对应关系,即,通过该对应关系表征哪些消息发送端共享哪些物理队列。相应地,进行存储时,由于身份信息可以表征待处理消息属于哪个消息发送端,因此,可以根据身份信息及该对应关系确定对应的物理队列,将该待处理消息存储至该对应的物理队列中。这样,通过预先设定好消息发送端与物理队列之间的对应关系,将消息发送端的待处理消息存储至对应的物理队列中,一定程度上可以提高存储效率。
进一步地,在本申请实施例中,消息发送端的数量大于物理队列的数量,其中,消息发送端的数量及物理队列的数量的具体值可以是根据实际情况设置的。示例的,可以设置物理队列的数量与消息发送端的消息产生量正相关,即,消息发送端的消息生成量越大,物理队列的数量可以越多,消息发送端的消息生成量越小,物理队列的数量可以越少。这样,一定程度上可以在确保物理队列能够满足存储需求的同时,减少资源浪费。需要说明的是,在物理队列为多个的情况下,可以在一个物理队列存满之后,再将之后获取到的待处理消息存储至下一物理队列,以避免浪费存储资源。当然,也可以是随机从中选择一个物理队列进行存储。
综上所述,本申请实施例通过获取至少两个消息发送端的待处理消息及所述待处理消息对应的身份信息,根据所述身份信息,将所述待处理消息存储至与所述身份信息对应的物理队列;其中,所述消息发送端的数量大于所述物理队列的数量。本申请实施例中,通过多个消息发送端共享物理队列,可以降低对硬件介质的耗费,进而减少硬件开销。
参照图4A,示出了本申请实施例提供的一种消息处理方法的具体步骤流程图,具体可以包括如下步骤:
步骤201,获取至少两个消息发送端的待处理消息及所述待处理消息对应的身份信息。
可选的,在本申请的一种实现方式中,身份信息可以包括待处理消息对应的消息序列标识以及待处理消息所属消息发送端对应的逻辑队列标识。步骤201可以包括:
子步骤2011,获取至少两个消息发送端的待处理消息,所述待处理消息对应的消息序列标识以及所述待处理消息所属消息发送端对应的逻辑队列标识。
在本申请实施例中,消息序列标识可以表示为SequenceId,逻辑队列标识可以表示为QueueId,QueueId的具体值可以是在预设范围内选取的,该预设范围可以是根据实际需求设定的,本申请实施例对此不作限定。SequenceId可以表征消息在所属消息发送端对应的逻辑队列中的位置,属于同一QueueId的消息的SequenceId可以单调递增。
消息发送端可以在待处理消息中指定QueueId以及SequenceId,相应地,可以直接从消息发送端获取QueueId以及SequenceId。其中,在本申请的一种实现方式中,QueueId可以是与消息发送端预先约定好的,SequenceId可以是由消息发送端管理,消息发送端可以在指定SequenceId时,确保SequenceId的唯一性以及递增特性。相应地,本申请实施例中,还可以执行步骤A实现约定QueueId:步骤A,对于任一消息发送端,确定所述消息发送端对应的逻辑队列标识,并将所述逻辑队列标识通知所述消息发送端。在该步骤中,确定消息发送端对应的逻辑队列标识时,可以是从预设范围中选择一个值作为逻辑队列标识,在选取时可以为不同消息发送端选取不同的值,进而可以确保QueueId的全局唯一性。将逻辑队列标识通知消息发送端之后,消息发送端可以在后续过程中在待处理消息中指定该逻辑队列标识。
在该实现方式中,无需额外执行操作,仅从消息发送端中直接获取即可得到待处理消息、QueueId及SequenceId,这样,一定程度上可以确保操作效率。
需要说明的是,对于消息发送端而言,消息发送端管理SequenceId的方式中,难度一般较大,因此,本申请的另一实现方式中,步骤201可以包括:
子步骤2012,获取至少两个消息发送端的待处理消息,以及所述待处理消息所属消息发送端对应的逻辑队列标识。
该步骤可以参照上述子步骤2011中的相关描述,此处不再赘述。
子步骤2013,确定所述待处理消息对应的消息序列标识。
在该步骤中,确定消息发送端对应的消息序列标识时,可以是从预设的消息序列标识范围中选择一个值作为消息序列标识,在选取时可以按照依次递增的方式为不同消息发送端依次选取,进而确保SequenceId可以满足的唯一性以及递增特性。在该实现方式中,仅需消息发送端指定QueueId,进而一定程度上可以降低消息发送端的实现难度。
步骤202,根据所述身份信息,将所述待处理消息存储至与所述身份信息对应的物理队列;其中,所述消息发送端的数量大于所述物理队列的数量。
其中,本申请实施例中的物理队列可以为自行建立的也可以是直接使用传统的消息队列产品中已有的物理队列,例如,直接使用Kafka、RocketMQ中的物理队列。
可选的,在身份信息包括待处理消息所属消息发送端所对应的逻辑队列标识的情况下,本申请实施例中可以执行步骤B:
步骤B,在索引中,按所述逻辑队列标识分类记录所述物理队列中的消息的存储位置。
本申请实施例中,索引可以用于表征物理队列中包含的逻辑队列中消息的存储位置与QueueId之间的对应关系。索引具体可以为索引表,索引表中的信息可以按照键值对(Key-Value)的方式存储,索引表可以基于持久化的KV存储,具体的,可以表通过内嵌的轻量话KV存储引擎存储,例如,LevelDB或RocksDB。或者,也可以通过调用外部的KV存储引擎存储。
消息的存储位置可以为消息的物理地址,通过物理地址可以唯一定位消息。按QueueId分类记录物理队列中的消息的存储位置时,可以将属于该QueueId的消息的存储位置与该QueueId对应记录,这样,通过对应记录,使得根据索引可以查找到不同QueueId对应的逻辑队列中消息的存储位置。具体记录时,可以是仅记录部分消息的存储位置,这样,可以减少记录索引所耗费的处理资源,提高记录索引的效率。进一步地,本申请实施例中,通过在索引中按QueueId分类记录物理队列中的消息的存储位置,使得后续存储待处理消息时,可以根据索引较为快速的确定出与待处理消息属于同一QueueId的消息的存储位置,进而一定程度上可以提高对待处理消息的存储效率。
本申请实施例中,可以是在首次向物理队列中存储待处理消息之后,执行记录索引的操作,也可以是在向物理队列中存储一定量的待处理消息之后,执行记录索引的操作。
可选的,在本申请的一种实现方式中,步骤B可以包括子步骤:
子步骤B1,在所述索引中,记录队首消息的第三存储位置及队尾消息的第一存储位置;其中,所述队首消息和所述队尾消息属于同一逻辑队列标识的消息。
本步骤中,可以先根据逻辑队列标识,确定属于该逻辑队列标识的消息,然后从这些消息组成的逻辑队列中,确定位于队列头的队首消息,然后获取该队首消息的存储地址,作为第三存储位置。以及,确定位于队列尾的队尾消息,然后获取该队尾消息的存储地址,作为第一存储位置。最后,将第三存储位置及第一存储位置写入索引。由于第三存储位置和第一存储位置可以准确的表征属于该逻辑队列标识的消息所组成的逻辑队列的队首及队尾的位置,因此,本申请实施例中,通过在索引中记录第三存储位置和第一存储位置,一定程度上可以提高后续使用该索引进行消息存储及消息读取的便捷性。
可选的,在本申请的一种实现方式中,子步骤B1可以包括:
子步骤B11,在所述物理队列中的所述队首消息和/或所述队尾消息变更的情况下,在所述索引中记录变更后的队首消息的第三存储位置和/或变更后的队尾消息的第一存储位置。
由于队首消息和/或队尾消息发生变更的情况下,可能会导致之前记录的第三存储位置及第一存储位置不准确,本申请实施例中,在队首消息和/或队尾消息变更的情况下,在索引中记录变更后的队首消息的第三存储位置和/或变更后的队尾消息的第一存储位置,可以确保索引中记录的存储位置的准确性。
可选的,步骤B还可以包括子步骤:
子步骤B2,在所述索引中,记录所述队首消息及所述队尾消息之间的至少一个中间消息的第四存储位置;所述中间消息、队首消息和所述队尾消息属于同一逻辑队列标识的消息。
其中,中间消息越多,所需记录的信息就越多,相应地,所耗费的处理资源会越多。中间消息越少,所需记录的信息就越少,相应地,所耗费的处理资源会越少,因此,可以根据实际需求选择设定中间消息的数量。中间消息所处的具体位置也可以是根据实际需求确定。示例的,中间消息可以为位于队列正中的消息。本申请实施例中,通过在索引中进一步记录中间消息的第四存储位置,使得索引可以提供更丰富的位置参考,进而一定程度上提高后续使用该索引进行消息存储及消息读取的便捷性。
可选的,步骤202可以包括如下子步骤:
子步骤2021,在所述索引中,查询所述逻辑队列标识所对应的队尾消息的第一存储位置;其中,所述队尾消息为所述物理队列的已有消息中,属于所述逻辑队列标识的消息。
本步骤中,可以先根据该QueueId与索引中记录的QueueId进行匹配,得到与QueueId相匹配的QueueId,然后从该匹配的QueueId对应的消息的存储位置中,获取队尾消息的存储位置,作为第一存储位置。
子步骤2022,根据所述身份信息、第一存储位置,将所述待处理消息存储至所述物理队列中。
本申请实施例中,通过索引确定第一存储位置,而第一存储位置可以较为便捷的定位待处理消息所属逻辑队列,进而方便将待处理消息按逻辑队列进行存储,这样,一定程度上提高存储效率,确保存储的复杂度较低。
可选的,在本申请的一种实现方式中,子步骤2022可以包括:
子步骤C1,根据所述身份信息,对所述待处理消息封装双向链表信息,获得第二消息;其中,所述双向链表信息的前向节点信息中设置所述第一存储位置,以及所述双向链表信息的后向节点信息设置为空或者设置为预设标识。
本申请实施例中,双向链表信息可以包括前向节点信息以及后向节点信息。可选的,对待处理消息封装双向链表信息时,可以将身份信息与待处理消息关联,然后将待处理消息作为负载,将前向节点信息、负载及后向节点信息这三部分封装为一体。
在前向节点信息中设置队尾消息的第一存储位置,可以是在前向节点信息中存储第一存储位置。在前向节点信息中设置队尾消息的第一存储位置,可以使得设置后的前向节点信息可以指向待处理消息所属逻辑队列中队尾消息,进而将待处理消息作为新的队尾消息与之前的队尾消息链接。
预设标识可以是根据实际需求预先设定的,示例的,预设标志可以为数字,字母,符号,等等。这样,通过将后向节点信息设置为空或者设置预设标识,可以方便后续插入新的待处理消息时,在后向节点信息中设置新的待处理消息的存储位置。
子步骤C2,将所述第二消息存储至所述物理队列中的第二存储位置。
可选的,本申请实施例中可以先根据物理队列的可用存储区,为第二消息分配一个物理地址,作为第二存储位置,然后将第二消息存储至该第二存储位置。
子步骤C3,根据所述前向节点信息的所述第一存储位置,在所述物理队列中查询所述第一存储位置的消息,并在所述消息的后向节点信息中设置所述第二存储位置。
本步骤中,可以直接从前向节点信息中读取第一存储位置,然后访问该第一存储位置,以确定出第一存储位置的消息,即,存入第二消息之前,待处理消息所属逻辑队列的队尾消息。接着,可以在该消息的后向节点信息中设置第二存储位置,在该消息的后向节点信息中设置第二存储位置,使得设置后的后向节点信息可以指向第二消息,即,指向新的队尾消息,进而将待处理消息作为新的队尾消息与之前的队尾消息链接。
本申请实施例中,通过在存储待处理消息时,为待处理消息封装双向链表信息,使得待处理消息所属逻辑队列标识的消息以双向链表的形式组成逻辑队列,属于同一逻辑队列标识的待处理消息在同一个双向链表中。查找到逻辑队列中的一个消息之后,可以根据双向链表信息,快捷的在物理队列中查找出消息的前向邻接消息及后向邻接消息,这样,通过双向链表信息即可快捷的查找出属于同一服务的消息的,进而在通过共享物理队列,降低硬件开销的同时,确保消息查找的效率,保证复杂度较低。这样,在后续按照从物理队列中读取消息时,也可以快捷的查找到需要读取的消息,进而降低消息查找所需的时间开销。
同时,本申请实施例中,通过在前向节点信息中设置队尾消息的第一存储位置,确保第二消息插入至待处理消息所属逻辑队列的队尾,由于待处理消息的SequenceId依次递增,这样,将第二消息插入至队尾,可以确保逻辑队列中的消息按照SequenceID的递增顺序依次链接,进而方便后续根据消息的SequenceID快速从物理队列中查找消息。
可选的,在本申请的另一种实现方式中,子步骤2022可以包括:
子步骤C4,根据所述身份信息,对所述待处理消息封装单向链表信息,获得第二消息;其中,所述单向链表信息设置为空或者设置为预设标识。
本申请实施例中,对待处理消息封装单向链表信息时,可以将身份信息与待处理消息关联,然后将待处理消息作为负载,将单向节点信息及负载这两部分封装为一体。
子步骤C5,将所述第二消息存储至所述物理队列中的第二存储位置。
具体的,子步骤C4、子步骤C5可以参照上述子步骤C1、子步骤C2,此处不再赘述。
子步骤C6,根据从所述索引中查到的所述第一存储位置,在物理队列中查找所述第一存储位置的消息,并在所述消息的单向链表信息中设置所述第二存储位置。
本步骤中,可以先从预设存储区中读取第一存储位置,其中,预设存储区可以是专门为存储第一存储位置设置的,相应地,在索引中查询到第一存储位置之后,可以将第一存储位置存储至预设存储区,以方便本步骤中进行读取。之后可以访问该第一存储位置,以确定出第一存储位置的消息。接着,可以在该消息的单向链表信息中设置第二存储位置,使得设置后的单向链表信息可以指向第二消息,即,指向新的队尾消息,进而将待处理消息作为新的队尾消息与之前的队尾消息链接。
本申请实施例中,通过在存储待处理消息时,为待处理消息封装单向链表信息,并在第一存储位置的消息的单向链表信息中设置第二存储位置,使得待处理消息所属逻辑队列标识的消息,按照由前至后的后向链接方向形成单向链表,属于同一逻辑队列标识的待处理消息在同一个单向链表中,进而组成待处理消息所属的逻辑队列。查找到逻辑队列中的一个消息之后,可以根据单向链表信息,快捷的在物理队列中查找出该消息在后向链接方向上的下一个相邻的消息,进而一定程度上在通过共享物理队列,降低硬件开销的同时,确保消息查找的效率,保证复杂度较低。这样,在后续从物理队列中读取消息时,也可以较为快捷的查找到需要读取的消息,进而一定程度上降低消息查找所需的时间开销。
可选的,在本申请的又一种实现方式中,子步骤2022可以包括:
子步骤C7,根据所述身份信息,对所述待处理消息封装单向链表信息,获得第二消息;其中,所述单向链表信息中设置所述第一存储位置。
本申请实施例中,可以先从预设存储区中读取第一存储位置,之后在单向链表信息中设置第一存储位置。这样,可以使得设置后的单向链表信息可以指向第一存储位置的消息,即,当前的队尾消息,进而可以将待处理消息作为新的队尾消息与之前的队尾消息链接。
子步骤C8,将所述第二消息存储至所述物理队列中的第二存储位置。
该步骤可以参照上述子步骤,此处不再赘述。
本申请实施例中,通过在存储待处理消息时,为待处理消息封装单向链表信息,并在待处理消息封装单向链表信息中设置第一存储位置,使得待处理消息所属逻辑队列标识的消息,按照由后至前的前向链接方向形成单向链表,属于同一逻辑队列标识的待处理消息在同一个单向链表中,进而组成待处理消息所属的逻辑队列。查找到逻辑队列中的一个消息之后,可以根据单向链表信息,快捷的在物理队列中查找出该消息在前向链接方向上的下一个相邻的消息,进而一定程度上在通过共享物理队列,降低硬件开销的同时,确保消息查找的效率,保证复杂度较低。这样,在后续按照从物理队列中读取消息时,也可以较为快捷的查找到需要读取的消息,进而一定程度上降低消息查找所需的时间开销。同时,本实现方式中仅需封装单向链表信息,对单向链表信息进行设置以及存储第二消息的步骤,相较于上一种封装单向链表信息的实现方式,所需执行的步骤更少,因此,存储效率更高。
进一步地,本申请实施例中,由于单向链表信息的实现方式中,需要额外设置预设存储区,而封装双向链表信息的实现方式中,无需额外设置预设存储区存放第一存储位置,直接读取从前向节点信息中的第一存储位置,即可实现查询第一存储位置的消息,因此,相较于封装单向链表信息的实现方式,封装双向链表信息的实现方式,可以降低存储资源开销,节省存储资源。
由于单向链表信息的实现方式中,仅需封装单向链表信息,对单向链表信息进行设置,而封装双向链表信息的实现方式中,需要封装双向链表信息,对双向链表信息进行设置,即,所需封装的数量及所需设置的内容更多,因此,相较于封装双向链表信息的实现方式,封装单向链表信息的实现方式,可以节省处理资源。
步骤203、接收消息读取请求;所述消息读取请求中包括目标消息的身份信息。
本申请实施例中,消息读取请求可以是消息请求端发送的,消息请求端可以与消息发送方相同,也可以不同。目标消息可以是消息请求端所需读取的消息。
步骤204、根据所述身份信息,从物理队列中读取所述目标消息。
可选的,在身份信息包括待处理消息所属消息发送端所对应的逻辑队列标识的情况下,步骤204可以包括子步骤:
子步骤2041,在缓存中未存储上次读取的已读消息及所述已读消息的第五存储位置的情况下,根据所述索引,查找所述身份信息在所述物理队列中的目标存储位置。
本申请实施例中,由于消息获取端往往是依次获取队列中的消息,这样,每次读取消息时,往往会从上一次读取的消息的位置后读取。因此,在读取消息之后,往往会缓存本次所读取消息中最后一个消息、消息的身份消息及其存储位置,即,缓存已读消息及第五存储位置,以方便后续快速定位要读取的消息。相应地,在缓存中未存储已读消息及已读消息的第五存储位置的情况下,即,没有可作为参考的第五存储位置的情况下,可以根据索引查找目标消息所在的目标存储位置。本申请实施例中,通过记录索引,并在没有可作为参考的第五存储位置的情况下,通过查找索引确定目标存储位置,一定程度上可以提高确定目标存储位置的效率,进而提高消息读取效率。
可选的,本申请实施例中,还可以在索引中,记录消息的消息序列标识。相应地,在身份信息包括逻辑队列标识和消息序列标识,索引中记录有队首消息的第三存储位置及队尾消息的第一存储位置的情况下,子步骤2041可以包括:
子步骤20411,在所述索引中,根据所述目标消息的目标逻辑队列标识、目标消息序列标识、所述队首消息的第三存储位置及所述队尾消息的第一存储位置,查找物理队列中距离所述目标消息序列标识最近的第六存储位置。
本申请实施例中,在待处理消息封装双向链表信息的情况下,可以先分别计算目标消息序列标识与队首消息的消息序列标识及队尾消息的消息序列标识之间的差值的绝对值,从第三存储位置及第一存储位置中,获取对应的绝对值最小的消息的存储位置,作为第六存储位置。示例的,假设目标消息序列标识与队首消息的消息序列标识的差值的绝对值最小,则可以获取队首消息的第三存储位置,作为第六存储位置。
可选的,在待处理消息封装单向链表信息的情况下,可以查找所述单向链表信息的链接方向上,所述物理队列中距离所述目标消息序列标识最近的第六存储位置。具体的,可以根据队首消息的消息序列标识、队尾消息的消息序列标识以及目标消息序列标识,确定在链接方向上位于目标消息之前的消息,然后计算这些消息的消息序列标识与目标消息序列标识的差值的绝对值,将对应的绝对值最小的消息的存储位置,作为第六存储位置。其中,若链接方向上,消息序列标识依次递增,则可以将消息序列标识小于目标消息序列标识,确定为在链接方向上位于目标消息之前的消息。反之,则可以将消息序列标识大于目标消息序列标识,确定为在链接方向上位于目标消息之前的消息。
可选的,在索引中还记录队首消息及队尾消息之间的至少一个中间消息的第四存储位置的情况下,子步骤20411可以包括:
子步骤D,在所述索引中,根据所述目标消息的目标逻辑队列标识、目标消息序列标识、所述队首消息的第三存储位置、中间消息的第四存储位置、所述队尾消息的第一存储位置,查找物理队列中距离所述目标消息序列标识最近的第六存储位置。
本申请实施例中,在待处理消息封装双向链表信息的情况下,可以先分别计算目标消息序列标识与队首消息的消息序列标识、队尾消息的消息序列标识及中间消息的消息序列标识之间的差值的绝对值,从第三存储位置、第一存储位置及中第四存储位置,获取对应的绝对值最小的消息的存储位置,作为第六存储位置。示例的,假设目标消息序列标识与队首消息的消息序列标识的差值的绝对值最小,则可以获取队首消息的第三存储位置,作为第六存储位置。
可选的,在待处理消息封装单向链表信息的情况下,可以根据队首消息的消息序列标识、队尾消息的消息序列标识、中间消息的消息序列标识以及目标消息序列标识,确定在链接方向上位于目标消息之前的消息,然后计算这些消息的消息序列标识与目标消息序列标识的差值的绝对值,从第三存储位置、第一存储位置及中第四存储位置,获取对应的绝对值最小的消息的存储位置,作为第六存储位置。示例的,假设链接方向上消息序列标识依次递增,队首消息、队尾消息及中间消息的消息序列标识分别为1、7、12,目标消息序列标识为5,那么可以确定队首消息为链接方向上最近的消息,将第三存储位置确定为第六存储位置。
本申请实施例中,通过在索引中记录队首消息、队尾消息及中间消息的存储位置,可以为确定第六存储位置提供更多的参考,进而一定程度上可以提高第六存储位置与目标消息的目标存储位置的靠近程度,进而提高后续根据第六存储位置确定目标存储位置的效率,减少时间开销。
子步骤2043,从所述目标存储位置读取所述目标消息。
可选的,本申请实施例中,子步骤2043可以包括:
子步骤20431,根据所述第六存储位置对应的消息开始,根据所述消息的链表信息从所述物理队列中查找所述目标消息的目标存储位置;其中,所述链表信息包括双向链表信息或单向链表信息。
在链表信息为双向链表信息的情况下,本步骤中可以先根据目标消息序列标识以及第六存储位置对应的消息的消息序列标识,确定第六存储位置对应的消息与目标消息之前的位置前后关系,若目标消息位于第六存储位置对应的消息之后,则可以从第六存储位置对应的消息开始,依次读取下一个消息的后向链表信息,根据后向链表信息定位下一个消息,直至定位的下一个消息的消息序列标识与目标消息序列标识一致,则可以将该消息的存储位置确定为目标存储位置。
在链表信息为单向链表信息的情况下,本步骤中可以从第六存储位置对应的消息开始,依次单向链表信息的链接方向上的下一个消息的单向链表信息,根据单向链表信息定位下一个消息,直至定位的下一个消息的消息序列标识与目标消息序列标识一致,则可以将该消息的存储位置确定为目标存储位置。
本申请实施例中,通过在索引中记录队首消息及队尾消息的存储位置,以及封装链表信息,使得读取目标消息过程中,可以从索引中定位出目标消息所属逻辑队列中与目标消息最近的第六存储位置,后续从最近的第六存储位置开始,根据链表信息从属于同一服务的消息的存储位置中查找目标存储位置即可,这样,相较于依次遍历物理队列确定目标消息的目标存储位置的方式,从最近的第六存储位置开始,根据链表信息查找目标消息的目标存储位置,可以提高目标消息的读取效率,降低消息读取的开销,确保消息读取的复杂度较低。
可选的,步骤204还可以包括子步骤:
子步骤2043,在缓存中存储上次读取的已读消息及所述已读消息的第五存储位置的情况下,根据所述已读消息所在的第五存储位置,确定所述身份信息在所述物理队列中的目标存储位置。
本步骤中,如果缓存中存储已读消息及已读消息的第五存储位置,则说明存在可作为参考的第五存储位置,因此,可以根据第五存储位置确定目标存储位置。具体的,可以在链表信息为双向链表信息的情况下,根据第五存储位置的后向链表信息,将后向链表信息所指示的消息的存储位置确定为目标存储位置。在链表信息为单向链表信息的情况下,可以根据第五存储位置的单向链表信息,确定已读消息在单向链表信息的链接方向上的下一个消息,将该消息的存储位置确定为目标存储位置。
本申请实施例中,通在在缓存中存储已读消息及已读消息的第五存储位置的情况下,即,存在可作为参考的第五存储位置的情况下,根据第五存储位置,确定目标存储位置的方式中,可以省略对索引的查找操作,进而可以提高确定目标存储位置的效率。
可选的,本申请实施例中,还可以从物理队列中,读取目标消息之后属于逻辑队列标识的至少一个消息。其中,从目标消息之后读取的消息的具体数量可以是根据实际需求设定,示例的,可以为设置数量为10,100,1000,等等。本申请实施例中,通过在从物理队列中,继续读取目标消息之后属于逻辑队列标识的至少一个消息,可以扩大所读取消息的数量,进而提高消息读取的消息。
需要说明的是,本申请实施例中,还可以在物理队列中的消息被读取之后,记录该消息的已被读取时长,在该时长大于预设阈值的情况下,删除该消息,进而可以避免对物理队列存储资源的浪费。相应地,在删除消息之后,可以对索引中进行更新,以确保索引的准确性。
参照图4B,示出了本申请提供的一种物理队列及索引示意图,在图4B(a)中,物理队列中存储有属于逻辑队列标识:Q1、Q2、Q3的消息,4B(c)中,物理队列中的消息包括前向节点信息、负载及后向节点信息三部分。这样,物理队列中消息的前向节点信息即后向节点信息分别指向所属逻辑队列中的前向邻接消息以及后向邻接消息。在4B(b)中,索引表中按照逻辑队列标识分类记录有队首消息、队尾消息及中间消息的存储地址及消息序列标识(Seq),以方便查找。
参照图4C,示出了本申请提供的一种逻辑队列角度的消息处理示意图,在该示意图中,可以根据消息生产者(producer)指定的消息Message及其身份信息“QueueId=1Seq=x”,将消息存储至物理队列中,该物理队列中属于同一QueueId的消息组成一个逻辑队列,可以看出该物理队列中包括N个逻辑队列。相应地,消息消费者(customer)可以从物理队列中获取消息。其中,消息生产者可以为消息发送端,消息消费者可以为消息获取端。
综上所述,本申请提供的一种消息处理方法,包括:获取至少两个消息发送端的待处理消息及所述待处理消息对应的身份信息,根据所述身份信息,将所述待处理消息存储至与所述身份信息对应的物理队列;其中,所述消息发送端的数量大于所述物理队列的数量;接收消息读取请求;所述消息读取请求中包括目标消息的身份信息,根据所述身份信息,从物理队列中读取所述目标消息。本申请中,通过多个消息发送端共享物理队列,可以降低对硬件介质的耗费,进而减少硬件开销。在存在大量的消息发送端的情况下,可以以较低的硬件成本支持消息发送端的消息存储需求。
同时,由于硬件设备所能支持的物理队列的数量是有限的,如果在存在大量消息发送端的情况下,通过不断增加物理队列的数量,受到所支持数量的显示,就会导致硬件设备无法满足消息存储需求。本申请通过共享物理队列,无需设置大量的物理队列,这样,在面对大量消息发送端的存储需求时,一定程度上可以避免物理队列过多,导致硬件设备无法支持的问题。
进一步地,相较于使用非关系型数据库模拟队列,以满足大量队列存储需求的方式,由于模拟队列时的实现逻辑较为复杂,因此,本申请通过共享物理队列,一定程度上可以降低满足需求的实现成本。同时,无需依赖非关系型数据库,进而可以避免非关系型数据库的选型及支持能力的限制。
参照图5,示出了本申请的一种消息读取方法的步骤流程图。该方法可以包括如下步骤:
步骤301、接收消息接收端发送的消息读取请求;所述消息读取请求中包括目标消息的身份信息。
该步骤可以参照上述步骤203,此处不再赘述。
步骤303、根据所述身份信息,从物理队列中读取与所述身份信息对应的目标消息;其中,所述物理队列中存储有至少两个消息发送端发送的待处理消息;其中,所述消息发送端的数量大于所述物理队列的数量。
该步骤可以参照上述步骤204,此处不再赘述。
综上所述,本申请实施例通过接收消息接收端发送的消息读取请求;所述消息读取请求中包括目标消息的身份信息,根据所述身份信息,从物理队列中读取与所述身份信息对应的目标消息;其中,所述物理队列中存储有至少两个消息发送端发送的待处理消息;其中,所述消息发送端的数量大于所述物理队列的数量。本申请中,通过多个消息发送端共享物理队列,可以降低对硬件介质的耗费,进而减少硬件开销。
参照图6,示出了本申请的另一种消息处理方法的步骤流程图,该方法可以包括如下步骤:
步骤401、获取至少两个消息发送端的待处理消息及所述待处理消息对应的身份信息;所述身份信息包括所述待处理消息所属消息发送端所对应的逻辑队列标识。
可选的,本步骤可以包括以下步骤:获取至少两个消息发送端的待处理消息,所述待处理消息对应的消息序列标识以及所述待处理消息所属消息发送端对应的逻辑队列标识;或者,可以包括以下步骤:获取至少两个消息发送端的待处理消息,以及所述待处理消息所属消息发送端对应的逻辑队列标识;确定所述待处理消息对应的消息序列标识。可选的,本申请实施例中还可以执行以下步骤:对于任一消息发送端,确定所述消息发送端对应的逻辑队列标识,并将所述逻辑队列标识通知所述消息发送端。具体的各个步骤的实现方式可以参照前述实施例中的相关描述,此处不再赘述。
步骤402、根据所述逻辑队列标识,在索引中确定所述待处理消息的第一存储位置;其中,所述索引中按所述逻辑队列标识分类记录有物理队列中的消息的存储位置。
可选的,本步骤可以包括以下步骤:在所述索引中,查询所述逻辑队列标识所对应的队尾消息的第一存储位置;其中,所述队尾消息为所述物理队列的已有消息中,属于所述逻辑队列标识的消息。在索引中记录存储位置的操作可以通过以下步骤实现:在所述索引中,记录队首消息的第三存储位置及队尾消息的第一存储位置;其中,所述队首消息和所述队尾消息属于同一逻辑队列标识的消息。具体的各个步骤的实现方式可以参照前述实施例中的相关描述,此处不再赘述。
步骤403、根据所述第一存储位置,将所述待处理消息以双向链表的形式,存储至与所述逻辑队列标识对应的所述物理队列;其中,属于同一逻辑队列标识的待处理消息在同一个双向链表中,所述消息发送端的数量大于所述物理队列的数量。
可选的本步骤可以包括以下步骤:根据所述身份信息,对所述待处理消息封装双向链表信息,获得第二消息;其中,所述双向链表信息的前向节点信息中设置所述第一存储位置,以及所述双向链表信息的后向节点信息设置为空或者设置为预设标识;将所述第二消息存储至所述物理队列中的第二存储位置;根据所述前向节点信息的所述第一存储位置,在所述物理队列中查询所述第一存储位置的消息,并在所述消息的后向节点信息中设置所述第二存储位置。具体的各个步骤的实现方式可以参照前述实施例中的相关描述,此处不再赘述。
综上所述,本申请实施例通过获取至少两个消息发送端的待处理消息及待处理消息对应的身份信息,该身份信息包括待处理消息所属消息发送端所对应的逻辑队列标识,根据逻辑队列标识,在索引中确定待处理消息的第一存储位置,其中,索引中按逻辑队列标识分类记录有物理队列中的消息的存储位置。根据所述第一存储位置,将待处理消息以双向链表的形式,存储至与逻辑队列标识对应的物理队列;其中,属于同一逻辑队列标识的待处理消息在同一个双向链表中,消息发送端的数量大于物理队列的数量。本申请实施例中,通过多个消息发送端共享物理队列,可以降低对硬件介质的耗费,进而减少硬件开销。同时,通过记录的索引可以较为便捷的定位出第一存储位置,进而一定程度上可以确保存储效率。进一步地,通过以双向链表的形式进行存储,可以使属于同一逻辑队列标识的待处理消息在同一个双向链表中。这样后续查找到时,可以根据双向链表快捷的在物理队列中查找出消息的前向邻接消息及后向邻接消息,进而确保消息查找的效率。
可选的,本申请实施例中还可以通过下述步骤实现消息读取:
步骤E、接收消息读取请求;所述消息读取请求中包括目标消息的身份信息;所述目标消息的身份信息包括目标逻辑队列标识及目标消息序列标识。
本步骤的实现方式可以参照前述实施例中的相关描述,此处不再赘述。
步骤F、根据所述索引、所述目标逻辑队列标识及所述目标消息序列标识,查找所述物理队列中距离所述目标消息序列标识最近的存储位置。
可选的,本步骤可以是在缓存中未存储上次读取的已读消息及所述已读消息的第五存储位置的情况下执行的。进一步地,所述索引中记录有队首消息的第三存储位置及队尾消息的第一存储位置的情况下,本步骤可以通过下述步骤实现:在所述索引中,根据所述目标消息的目标逻辑队列标识、目标消息序列标识、所述队首消息的第三存储位置及所述队尾消息的第一存储位置,查找物理队列中距离所述目标消息序列标识最近的存储位置。具体的各个步骤的实现方式可以参照前述实施例中的相关描述,此处不再赘述。
步骤G、根据所述最近的存储位置对应的消息的双向链表信息,从所述物理队列中查找所述目标消息的目标存储位置。
可选的,本步骤中可以根据所述最近的存储位置对应的消息开始,根据所述消息的双向链表信息从所述物理队列中查找所述目标消息的目标存储位置。
步骤H、从所述目标存储位置读取所述目标消息。
本步骤的实现方式可以参照前述实施例中的相关描述,此处不再赘述。
可选的,本申请实施例中还可以执行以下操作:在缓存中存储上次读取的已读消息及所述已读消息的第五存储位置的情况下,根据所述已读消息所在的第五存储位置,确定所述身份信息在所述物理队列中的目标存储位置。
可选的,本申请实施例中还可以执行以下操作:从所述物理队列中,读取所述目标消息之后属于所述逻辑队列标识的至少一个消息。
具体的各个操作的实现方式可以参照前述实施例中的相关描述,此处不再赘述。
参照图7,示出了本申请的一种消息处理装置的结构图,包括:
获取模块501,用于获取至少两个消息发送端的待处理消息及所述待处理消息对应的身份信息;所述身份信息包括所述待处理消息所属消息发送端所对应的逻辑队列标识。
确定模块502,用于根据所述逻辑队列标识,在索引中确定所述待处理消息的第一存储位置;其中,所述索引中按所述逻辑队列标识分类记录有物理队列中的消息的存储位置。
存储模块503,用于根据所述第一存储位置,将所述待处理消息以双向链表的形式,存储至与所述逻辑队列标识对应的所述物理队列;其中,属于同一逻辑队列标识的待处理消息在同一个双向链表中,所述消息发送端的数量大于所述物理队列的数量。
可选的,所述装置还包括:
接收模块,用于接收消息读取请求;所述消息读取请求中包括目标消息的身份信息;所述目标消息的身份信息包括目标逻辑队列标识及目标消息序列标识。
第一查找模块,用于根据所述索引、所述目标逻辑队列标识及所述目标消息序列标识,查找所述物理队列中距离所述目标消息序列标识最近的存储位置。
第二查找模块,用于根据所述最近的存储位置对应的消息的双向链表信息,从所述物理队列中查找所述目标消息的目标存储位置。
读取模块,用于从所述目标存储位置读取所述目标消息。
综上所述,本申请实施例提供的装置,通过获取至少两个消息发送端的待处理消息及待处理消息对应的身份信息,该身份信息包括待处理消息所属消息发送端所对应的逻辑队列标识,根据逻辑队列标识,在索引中确定待处理消息的第一存储位置,其中,索引中按逻辑队列标识分类记录有物理队列中的消息的存储位置。根据所述第一存储位置,将待处理消息以双向链表的形式,存储至与逻辑队列标识对应的物理队列;其中,属于同一逻辑队列标识的待处理消息在同一个双向链表中,消息发送端的数量大于物理队列的数量。本申请实施例中,通过多个消息发送端共享物理队列,可以降低对硬件介质的耗费,进而减少硬件开销。同时,通过记录的索引可以较为便捷的定位出第一存储位置,进而一定程度上可以确保存储效率。进一步地,通过以双向链表的形式进行存储,可以使属于同一逻辑队列标识的待处理消息在同一个双向链表中。这样后续查找到时,可以根据双向链表快捷的在物理队列中查找出消息的前向邻接消息及后向邻接消息,进而确保消息查找的效率。
参照图8,示出了本申请的另一种消息处理装置的结构图,包括:
获取模块601,用于获取至少两个消息发送端的待处理消息及所述待处理消息对应的身份信息;
第一存储模块602,用于根据所述身份信息,将所述待处理消息存储至与所述身份信息对应的物理队列;其中,所述消息发送端的数量大于所述物理队列的数量。
可选的,在所述身份信息包括所述待处理消息所属消息发送端所对应的逻辑队列标识的情况下,还包括:
第二存储模块,用于在索引中,按所述逻辑队列标识分类记录所述物理队列中的消息的存储位置。
可选的,所述第一存储模块602,包括:
查询子模块,用于在所述索引中,查询所述逻辑队列标识所对应的队尾消息的第一存储位置;其中,所述队尾消息为所述物理队列的已有消息中,属于所述逻辑队列标识的消息;
存储子模块,用于根据所述身份信息、第一存储位置,将所述待处理消息存储至所述物理队列中。
可选的,所述存储子模块,包括:
第一封装单元,用于根据所述身份信息,对所述待处理消息封装双向链表信息;
第一设置单元,用于在所述双向链表信息的前向节点信息中设置所述第一存储位置,以及将所述双向链表信息的后向节点信息设置为空或者设置为预设标识,获得第二消息;
第一存储单元,用于将所述第二消息存储至所述物理队列中的第二存储位置;
第二设置单元,用于根据所述前向节点信息的所述第一存储位置,在所述物理队列中查询所述第一存储位置的消息,并在所述消息的后向节点信息中设置所述第二存储位置。
可选的,所述根据存储子模块,包括:
第二封装单元,用于根据所述身份信息,对所述待处理消息封装单向链表信息;
第三设置单元,用于将所述单向链表信息设置为空或者设置为预设标识,获得第二消息;
第二存储单元,用于将所述第二消息存储至所述物理队列中的第二存储位置;
第四设置单元,用于根据从所述索引中查到的所述第一存储位置,在物理队列中查找所述第一存储位置的消息,并在所述消息的单向链表信息中设置所述第二存储位置。
可选的,所述存储子模块,包括:
第三封装单元,用于根据所述身份信息,对所述待处理消息封装单向链表信息;
第五设置单元,用于在所述单向链表信息中设置所述第一存储位置,获得第二消息;
第三存储单元,用于将所述第二消息存储至所述物理队列中的第二存储位置。
可选的,所述第二存储模块,包括:
第一记录子模块,用于在所述索引中,记录队首消息的第三存储位置及队尾消息的第一存储位置;其中,所述队首消息和所述队尾消息属于同一逻辑队列标识的消息。
可选的,所述第一记录子模块,包括:
记录子单元,用于在所述物理队列中的所述队首消息和/或所述队尾消息变更的情况下,在所述索引中记录变更后的队首消息的第三存储位置和/或变更后的队尾消息的第一存储位置。
可选的,第二存储模块,还包括:
第二记录子模块,用于在所述索引中,记录所述队首消息及所述队尾消息之间的至少一个中间消息的第四存储位置;所述中间消息、队首消息和所述队尾消息属于同一逻辑队列标识的消息。
可选的,所述身份信息包括所述待处理消息对应的消息序列标识以及所述待处理消息所属消息发送端对应的逻辑队列标识;
所述获取模块601,包括:
第一获取子模块,用于获取至少两个消息发送端的待处理消息,所述待处理消息对应的消息序列标识以及所述待处理消息所属消息发送端对应的逻辑队列标识;
或者,所述获取模块601,包括:
第二获取子模块,用于获取至少两个消息发送端的待处理消息,以及所述待处理消息所属消息发送端对应的逻辑队列标识;
第一确定子模块,用于确定所述待处理消息对应的消息序列标识。
可选的,还包括:
确定模块,用于对于任一消息发送端,确定所述消息发送端对应的逻辑队列标识,并将所述逻辑队列标识通知所述消息发送端。
可选的,还包括:
接收模块,用于接收消息读取请求;所述消息读取请求中包括目标消息的身份信息;
第一读取模块,用于根据所述身份信息,从物理队列中读取所述目标消息。
可选的,还包括:
记录模块,用于在所述索引中,记录所述消息的消息序列标识。
可选的,在所述身份信息包括所述待处理消息所属消息发送端所对应的逻辑队列标识的情况下,所述第一读取模块,包括:
第一查找子模块,用于在缓存中未存储上次读取的已读消息及所述已读消息的第五存储位置的情况下,根据所述索引,查找所述身份信息在所述物理队列中的目标存储位置;
第一读取子模块,用于从所述目标存储位置读取所述目标消息。
可选的,还包括:
第二确定子模块,用于在缓存中存储上次读取的已读消息及所述已读消息的第五存储位置的情况下,根据所述已读消息所在的第五存储位置,确定所述身份信息在所述物理队列中的目标存储位置。
可选的,在所述身份信息包括逻辑队列标识和消息序列标识,所述索引中记录有队首消息的第三存储位置及队尾消息的第一存储位置的情况下,所述第一查找子模块,包括:
查找单元,用于在所述索引中,根据所述目标消息的目标逻辑队列标识、目标消息序列标识、所述队首消息的第三存储位置及所述队尾消息的第一存储位置,查找物理队列中距离所述目标消息序列标识最近的第六存储位置;
所述第一读取模块,包括:
第二查找子模块,用于根据所述第六存储位置对应的消息开始,根据所述消息的链表信息从所述物理队列中查找所述目标消息的目标存储位置;其中,所述链表信息包括双向链表信息或单向链表信息;
第二读取子模块,用于从所述目标存储位置读取所述目标消息。
可选的,所述索引中还记录所述队首消息及所述队尾消息之间的至少一个中间消息的第四存储位置的情况下,所述查找单元,包括:
第一查找子单元,用于在所述索引中,根据所述目标消息的目标逻辑队列标识、目标消息序列标识、所述队首消息的第三存储位置、中间消息的第四存储位置、所述队尾消息的第一存储位置,查找物理队列中距离所述目标消息序列标识最近的第六存储位置。
可选的,在对所述待处理消息封装单向链表信息的情况下,所述查找单元,包括:
第二查找子单元,用于查找所述单向链表信息的链接方向上,所述物理队列中距离所述目标消息序列标识最近的第六存储位置。
可选的,还包括:
第二读取模块,用于从所述物理队列中,读取所述目标消息之后属于所述逻辑队列标识的至少一个消息。
综上所述,本申请实施例提供的装置,通过获取至少两个消息发送端的待处理消息及所述待处理消息对应的身份信息,根据所述身份信息,将所述待处理消息存储至与所述身份信息对应的物理队列;其中,所述消息发送端的数量大于所述物理队列的数量。本申请中,通过多个消息发送端共享物理队列,可以降低对硬件介质的耗费,进而减少硬件开销。
参照图9,示出了本申请的一种消息读取装置的结构图,包括:
获取模块611,用于接收消息接收端发送的消息读取请求;所述消息读取请求中包括目标消息的身份信息;
读取模块612,用于根据所述身份信息,从物理队列中读取与所述身份信息对应的目标消息;其中,所述物理队列中存储有至少两个消息发送端发送的待处理消息;其中,所述消息发送端的数量大于所述物理队列的数量。
综上所述,本申请实施例通过接收消息接收端发送的消息读取请求;所述消息读取请求中包括目标消息的身份信息,根据所述身份信息,从物理队列中读取与所述身份信息对应的目标消息;其中,所述物理队列中存储有至少两个消息发送端发送的待处理消息;其中,所述消息发送端的数量大于所述物理队列的数量。本申请中,通过多个消息发送端共享物理队列,可以降低对硬件介质的耗费,进而减少硬件开销。
本申请实施例还提供了一种非易失性可读存储介质,该存储介质中存储有一个或多个模块(programs),该一个或多个模块被应用在设备时,可以使得该设备执行本申请实施例中各方法步骤的指令(instructions)。
本申请实施例提供了一个或多个机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得电子设备执行如上述实施例中一个或多个所述的方法。本申请实施例中,所述电子设备包括终端设备、服务器(集群)等各类型的设备。
本公开的实施例可被实现为使用任意适当的硬件,固件,软件,或及其任意组合进行想要的配置的装置,该装置可包括终端设备、服务器(集群)等电子设备。图10示意性地示出了可被用于实现本申请中所述的各个实施例的示例性装置700333。
对于一个实施例,图10示出了示例性装置700,该装置具有一个或多个处理器702、被耦合到(一个或多个)处理器702中的至少一个的控制模块(芯片组)704、被耦合到控制模块704的存储器706、被耦合到控制模块704的非易失性存储器(NVM)/存储设备708、被耦合到控制模块704的一个或多个输入/输出设备710,以及被耦合到控制模块704的网络接口712。
处理器702可包括一个或多个单核或多核处理器,处理器702可包括通用处理器或专用处理器(例如图形处理器、应用处理器、基频处理器等)的任意组合。在一些实施例中,装置700能够作为本申请实施例中所述终端设备、服务器(集群)等设备。
在一些实施例中,装置700可包括具有指令714的一个或多个计算机可读介质(例如,存储器706或NVM/存储设备708)以及与该一个或多个计算机可读介质相合并被配置为执行指令714以实现模块从而执行本公开中所述的动作的一个或多个处理器702。
对于一个实施例,控制模块704可包括任意适当的接口控制器,以向(一个或多个)处理器702中的至少一个和/或与控制模块704通信的任意适当的设备或组件提供任意适当的接口。
控制模块704可包括存储器控制器模块,以向存储器706提供接口。存储器控制器模块可以是硬件模块、软件模块和/或固件模块。
存储器706可被用于例如为装置700加载和存储数据和/或指令714。对于一个实施例,存储器706可包括任意适当的易失性存储器,例如,适当的DRAM。在一些实施例中,存储器706可包括双倍数据速率类型四同步动态随机存取存储器(DDR4SDRAM)。
对于一个实施例,控制模块704可包括一个或多个输入/输出控制器,以向NVM/存储设备708及(一个或多个)输入/输出设备710提供接口。
例如,NVM/存储设备708可被用于存储数据和/或指令714。NVM/存储设备708可包括任意适当的非易失性存储器(例如,闪存)和/或可包括任意适当的(一个或多个)非易失性存储设备(例如,一个或多个硬盘驱动器(HDD)、一个或多个光盘(CD)驱动器和/或一个或多个数字通用光盘(DVD)驱动器)。
NVM/存储设备708可包括在物理上作为装置700被安装在其上的设备的一部分的存储资源,或者其可被该设备访问可不必作为该设备的一部分。例如,NVM/存储设备708可通过网络经由(一个或多个)输入/输出设备710进行访问。
(一个或多个)输入/输出设备710可为装置700提供接口以与任意其他适当的设备通信,输入/输出设备710可以包括通信组件、音频组件、传感器组件等。网络接口712可为装置700提供接口以通过一个或多个网络通信,装置700可根据一个或多个无线网络标准和/或协议中的任意标准和/或协议来与无线网络的一个或多个组件进行无线通信,例如接入基于通信标准的无线网络,如WiFi、2G、3G、4G、5G等,或它们的组合进行无线通信。
对于一个实施例,(一个或多个)处理器702中的至少一个可与控制模块704的一个或多个控制器(例如,存储器控制器模块)的逻辑封装在一起。对于一个实施例,(一个或多个)处理器702中的至少一个可与控制模块704的一个或多个控制器的逻辑封装在一起以形成系统级封装(SiP)。对于一个实施例,(一个或多个)处理器702中的至少一个可与控制模块704的一个或多个控制器的逻辑集成在同一模具上。对于一个实施例,(一个或多个)处理器702中的至少一个可与控制模块704的一个或多个控制器的逻辑集成在同一模具上以形成片上系统(SoC)。
在各个实施例中,装置700可以但不限于是:服务器、台式计算设备或移动计算设备(例如,膝上型计算设备、手持计算设备、平板电脑、上网本等)等终端设备。在各个实施例中,装置700可具有更多或更少的组件和/或不同的架构。例如,在一些实施例中,装置700包括一个或多个摄像机、键盘、液晶显示器(LCD)屏幕(包括触屏显示器)、非易失性存储器端口、多个天线、图形芯片、专用集成电路(ASIC)和扬声器。
其中,检测装置中可采用主控芯片作为处理器或控制模块,传感器数据、位置信息等存储到存储器或NVM/存储设备中,传感器组可作为输入/输出设备,通信接口可包括网络接口。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本申请所提供的一种沙箱实现方法和装置,一种电子设备和一种存储介质,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (27)

1.一种消息处理方法,其特征在于,所述方法包括:
获取至少两个消息发送端的待处理消息及所述待处理消息对应的身份信息;
根据所述身份信息,将所述待处理消息存储至与所述身份信息对应的物理队列;其中,所述消息发送端的数量大于所述物理队列的数量。
2.根据权利要求1所述的方法,其特征在于,在所述身份信息包括所述待处理消息所属消息发送端所对应的逻辑队列标识的情况下,还包括:
在索引中,按所述逻辑队列标识分类记录所述物理队列中的消息的存储位置。
3.根据权利要求2所述的方法,其特征在于,所述根据所述身份信息,将所述待处理消息存储至与所述身份信息对应的物理队列,包括:
在所述索引中,查询所述逻辑队列标识所对应的队尾消息的第一存储位置;其中,所述队尾消息为所述物理队列的已有消息中,属于所述逻辑队列标识的消息;
根据所述身份信息、第一存储位置,将所述待处理消息存储至所述物理队列中。
4.根据权利要求3所述的方法,其特征在于,所述根据所述身份信息、第一存储位置,将所述待处理消息存储至所述物理队列中,包括:
根据所述身份信息,对所述待处理消息封装双向链表信息,获得第二消息;其中,所述双向链表信息的前向节点信息中设置所述第一存储位置,以及所述双向链表信息的后向节点信息设置为空或者设置为预设标识;
将所述第二消息存储至所述物理队列中的第二存储位置;
根据所述前向节点信息的所述第一存储位置,在所述物理队列中查询所述第一存储位置的消息,并在所述消息的后向节点信息中设置所述第二存储位置。
5.根据权利要求3所述的方法,其特征在于,所述根据所述身份信息、第一存储位置,将所述待处理消息存储至所述物理队列中,包括:
根据所述身份信息,对所述待处理消息封装单向链表信息,获得第二消息;其中,所述单向链表信息设置为空或者设置为预设标识;
将所述第二消息存储至所述物理队列中的第二存储位置;
根据从所述索引中查到的所述第一存储位置,在物理队列中查找所述第一存储位置的消息,并在所述消息的单向链表信息中设置所述第二存储位置。
6.根据权利要求3所述的方法,其特征在于,所述根据所述身份信息、第一存储位置,将所述待处理消息存储至所述物理队列中,包括:
根据所述身份信息,对所述待处理消息封装单向链表信息,获得第二消息;其中,所述单向链表信息中设置所述第一存储位置;
将所述第二消息存储至所述物理队列中的第二存储位置。
7.根据权利要求3所述的方法,其特征在于,所述在索引中,按所述逻辑队列标识分类记录所述物理队列中的消息的存储位置,包括:
在所述索引中,记录队首消息的第三存储位置及队尾消息的第一存储位置;其中,所述队首消息和所述队尾消息属于同一逻辑队列标识的消息。
8.根据权利要求7所述的方法,其特征在于,所述在索引中,记录队首消息的第三存储位置及队尾消息的第一存储位置,包括:
在所述物理队列中的所述队首消息和/或所述队尾消息变更的情况下,在所述索引中记录变更后的队首消息的第三存储位置和/或变更后的队尾消息的第一存储位置。
9.根据权利要求7所述的方法,其特征在于,还包括:
在所述索引中,记录所述队首消息及所述队尾消息之间的至少一个中间消息的第四存储位置;所述中间消息、队首消息和所述队尾消息属于同一逻辑队列标识的消息。
10.根据权利要求1-9任一项所述的方法,其特征在于,所述身份信息包括所述待处理消息对应的消息序列标识以及所述待处理消息所属消息发送端对应的逻辑队列标识;
所述获取至少两个消息发送端的待处理消息及所述待处理消息对应的身份信息,包括:
获取至少两个消息发送端的待处理消息,所述待处理消息对应的消息序列标识以及所述待处理消息所属消息发送端对应的逻辑队列标识;
或者,所述获取至少两个消息发送端的待处理消息及所述待处理消息对应的身份信息,包括:
获取至少两个消息发送端的待处理消息,以及所述待处理消息所属消息发送端对应的逻辑队列标识;
确定所述待处理消息对应的消息序列标识。
11.根据权利要求10所述的方法,其特征在于,还包括:
对于任一消息发送端,确定所述消息发送端对应的逻辑队列标识,并将所述逻辑队列标识通知所述消息发送端。
12.根据权利要求2-9任一项所述的方法,其特征在于,还包括:
接收消息读取请求;所述消息读取请求中包括目标消息的身份信息;
根据所述身份信息,从物理队列中读取所述目标消息。
13.根据权利要求12所述的方法,其特征在于,还包括:
在所述索引中,记录所述消息的消息序列标识。
14.根据权利要求13所述的方法,其特征在于,在所述身份信息包括所述待处理消息所属消息发送端所对应的逻辑队列标识的情况下,所述根据所述身份信息,从物理队列中读取所述目标消息,包括:
在缓存中未存储上次读取的已读消息及所述已读消息的第五存储位置的情况下,根据所述索引,查找所述身份信息在所述物理队列中的目标存储位置;
从所述目标存储位置读取所述目标消息。
15.根据权利要求14所述的方法,其特征在于,还包括:
在缓存中存储上次读取的已读消息及所述已读消息的第五存储位置的情况下,根据所述已读消息所在的第五存储位置,确定所述身份信息在所述物理队列中的目标存储位置。
16.根据权利要求14所述的方法,其特征在于,在所述身份信息包括逻辑队列标识和消息序列标识,所述索引中记录有队首消息的第三存储位置及队尾消息的第一存储位置的情况下,所述根据所述索引,查找所述身份信息在所述物理队列中的目标存储位置,包括:
在所述索引中,根据所述目标消息的目标逻辑队列标识、目标消息序列标识、所述队首消息的第三存储位置及所述队尾消息的第一存储位置,查找物理队列中距离所述目标消息序列标识最近的第六存储位置;
所述根据所述身份信息,从物理队列中读取所述目标消息,包括:
根据所述第六存储位置对应的消息开始,根据所述消息的链表信息从所述物理队列中查找所述目标消息的目标存储位置;其中,所述链表信息包括双向链表信息或单向链表信息;
从所述目标存储位置读取所述目标消息。
17.根据权利要求16所述的方法,其特征在于,所述索引中还记录所述队首消息及所述队尾消息之间的至少一个中间消息的第四存储位置的情况下,所述在所述索引中,根据所述目标消息的目标逻辑队列标识、目标消息序列标识、所述队首消息的第三存储位置及所述队尾消息的第一存储位置,查找物理队列中距离所述目标消息序列标识最近的第六存储位置,包括:
在所述索引中,根据所述目标消息的目标逻辑队列标识、目标消息序列标识、所述队首消息的第三存储位置、中间消息的第四存储位置、所述队尾消息的第一存储位置,查找物理队列中距离所述目标消息序列标识最近的第六存储位置。
18.根据权利要求16所述的方法,其特征在于,在对所述待处理消息封装单向链表信息的情况下,所述查找物理队列中距离所述目标消息序列标识最近的第六存储位置,包括:
查找所述单向链表信息的链接方向上,所述物理队列中距离所述目标消息序列标识最近的第六存储位置。
19.根据权利要求12所述的方法,其特征在于,还包括:
从所述物理队列中,读取所述目标消息之后属于所述逻辑队列标识的至少一个消息。
20.一种消息读取方法,其特征在于,所述方法包括:
接收消息接收端发送的消息读取请求;所述消息读取请求中包括目标消息的身份信息;
根据所述身份信息,从物理队列中读取与所述身份信息对应的目标消息;其中,所述物理队列中存储有至少两个消息发送端发送的待处理消息;其中,所述消息发送端的数量大于所述物理队列的数量。
21.一种消息处理方法,其特征在于,所述方法包括:
获取至少两个消息发送端的待处理消息及所述待处理消息对应的身份信息;所述身份信息包括所述待处理消息所属消息发送端所对应的逻辑队列标识;
根据所述逻辑队列标识,在索引中确定所述待处理消息的第一存储位置;其中,所述索引中按所述逻辑队列标识分类记录有物理队列中的消息的存储位置;
根据所述第一存储位置,将所述待处理消息以双向链表的形式,存储至与所述逻辑队列标识对应的所述物理队列;其中,属于同一逻辑队列标识的待处理消息在同一个双向链表中,所述消息发送端的数量大于所述物理队列的数量。
22.根据权利要求21所述的方法,其特征在于,所述方法还包括:
接收消息读取请求;所述消息读取请求中包括目标消息的身份信息;所述目标消息的身份信息包括目标逻辑队列标识及目标消息序列标识;
根据所述索引、所述目标逻辑队列标识及所述目标消息序列标识,查找所述物理队列中距离所述目标消息序列标识最近的存储位置;
根据所述最近的存储位置对应的消息的双向链表信息,从所述物理队列中查找所述目标消息的目标存储位置;
从所述目标存储位置读取所述目标消息。
23.一种消息处理装置,其特征在于,所述装置包括:
获取模块,用于获取至少两个消息发送端的待处理消息及所述待处理消息对应的身份信息;
第一存储模块,用于根据所述身份信息,将所述待处理消息存储至与所述身份信息对应的物理队列;其中,所述消息发送端的数量大于所述物理队列的数量。
24.一种消息读取装置,其特征在于,所述装置包括:
获取模块,用于接收消息接收端发送的消息读取请求;所述消息读取请求中包括目标消息的身份信息;
读取模块,用于根据所述身份信息,从物理队列中读取与所述身份信息对应的目标消息;其中,所述物理队列中存储有至少两个消息发送端发送的待处理消息;其中,所述消息发送端的数量大于所述物理队列的数量。
25.一种消息处理装置,其特征在于,所述装置包括:
获取模块,用于获取至少两个消息发送端的待处理消息及所述待处理消息对应的身份信息;所述身份信息包括所述待处理消息所属消息发送端所对应的逻辑队列标识;
确定模块,用于根据所述逻辑队列标识,在索引中确定所述待处理消息的第一存储位置;其中,所述索引中按所述逻辑队列标识分类记录有物理队列中的消息的存储位置;
存储模块,用于根据所述第一存储位置,将所述待处理消息以双向链表的形式,存储至与所述逻辑队列标识对应的所述物理队列;其中,属于同一逻辑队列标识的待处理消息在同一个双向链表中,所述消息发送端的数量大于所述物理队列的数量。
26.一种装置,其特征在于,包括:
一个或多个处理器;和
其上存储有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行所述指令时,使得所述装置执行如权利要求1至22的方法。
27.一个或多个机器可读介质,其上存储有指令,当由一个或多个处理器执行所述指令时,执行如权利要求1至22的方法。
CN202010700917.8A 2020-07-20 2020-07-20 一种消息处理方法、消息读取方法、装置及可读介质 Pending CN113296973A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010700917.8A CN113296973A (zh) 2020-07-20 2020-07-20 一种消息处理方法、消息读取方法、装置及可读介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010700917.8A CN113296973A (zh) 2020-07-20 2020-07-20 一种消息处理方法、消息读取方法、装置及可读介质

Publications (1)

Publication Number Publication Date
CN113296973A true CN113296973A (zh) 2021-08-24

Family

ID=77318647

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010700917.8A Pending CN113296973A (zh) 2020-07-20 2020-07-20 一种消息处理方法、消息读取方法、装置及可读介质

Country Status (1)

Country Link
CN (1) CN113296973A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113448757A (zh) * 2021-08-30 2021-09-28 阿里云计算有限公司 消息处理方法、装置、设备、存储介质和系统

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100198920A1 (en) * 2009-01-30 2010-08-05 Oracle International Corporation High performant information sharing and replication for single-publisher and multiple-subscriber configuration
CN104079508A (zh) * 2013-03-27 2014-10-01 华为技术有限公司 消息处理方法及装置
CN105512244A (zh) * 2015-11-30 2016-04-20 北京京东尚科信息技术有限公司 基于消息队列实现数据库事务处理的方法及装置
US20180212857A1 (en) * 2017-01-26 2018-07-26 International Business Machines Corporation Proactive channel agent
CN109032821A (zh) * 2018-08-27 2018-12-18 百度在线网络技术(北京)有限公司 主题消息处理方法、装置、设备及存储介质
CN109376020A (zh) * 2018-09-18 2019-02-22 中国银行股份有限公司 多区块链交互并发下的数据处理方法、装置及存储介质
CN110110006A (zh) * 2019-04-15 2019-08-09 平安普惠企业管理有限公司 数据管理方法及相关产品
CN110457251A (zh) * 2018-05-07 2019-11-15 大唐移动通信设备有限公司 一种多处理器间的数据通信方法及装置
CN110968431A (zh) * 2018-09-28 2020-04-07 阿里巴巴集团控股有限公司 一种消息处理方法、装置及设备
CN111221663A (zh) * 2019-11-21 2020-06-02 苏州浪潮智能科技有限公司 一种消息数据处理方法、装置、设备及可读存储介质

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100198920A1 (en) * 2009-01-30 2010-08-05 Oracle International Corporation High performant information sharing and replication for single-publisher and multiple-subscriber configuration
CN104079508A (zh) * 2013-03-27 2014-10-01 华为技术有限公司 消息处理方法及装置
CN105512244A (zh) * 2015-11-30 2016-04-20 北京京东尚科信息技术有限公司 基于消息队列实现数据库事务处理的方法及装置
US20180212857A1 (en) * 2017-01-26 2018-07-26 International Business Machines Corporation Proactive channel agent
CN110457251A (zh) * 2018-05-07 2019-11-15 大唐移动通信设备有限公司 一种多处理器间的数据通信方法及装置
CN109032821A (zh) * 2018-08-27 2018-12-18 百度在线网络技术(北京)有限公司 主题消息处理方法、装置、设备及存储介质
CN109376020A (zh) * 2018-09-18 2019-02-22 中国银行股份有限公司 多区块链交互并发下的数据处理方法、装置及存储介质
CN110968431A (zh) * 2018-09-28 2020-04-07 阿里巴巴集团控股有限公司 一种消息处理方法、装置及设备
CN110110006A (zh) * 2019-04-15 2019-08-09 平安普惠企业管理有限公司 数据管理方法及相关产品
CN111221663A (zh) * 2019-11-21 2020-06-02 苏州浪潮智能科技有限公司 一种消息数据处理方法、装置、设备及可读存储介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
VILA, PEPE 等: "Loophole: Timing Attacks on Shared Event Loops in Chrome", PROCEEDINGS OF THE 26TH USENIX SECURITY SYMPOSIUM, 16 April 2018 (2018-04-16) *
张荣华;田泽;韩炜;: "基于链表的动态存储器管理设计与实现", 计算机技术与发展, no. 07, 10 July 2011 (2011-07-10) *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113448757A (zh) * 2021-08-30 2021-09-28 阿里云计算有限公司 消息处理方法、装置、设备、存储介质和系统
CN113448757B (zh) * 2021-08-30 2022-02-01 阿里云计算有限公司 消息处理方法、装置、设备、存储介质和系统

Similar Documents

Publication Publication Date Title
CN109144791B (zh) 数据转存方法、装置和数据管理服务器
CN110347651B (zh) 基于云存储的数据同步方法、装置、设备及存储介质
CN102857578B (zh) 一种网络硬盘的文件上传方法、系统及网盘客户端
CN108399175B (zh) 一种数据存储、查询方法及其装置
CN105354195B (zh) 一种信息搜索方法及装置
CN104298687A (zh) 一种哈希分区管理方法及装置
CN111666184B (zh) 固态驱动器ssd硬盘测试方法、装置及电子设备
CN110865985A (zh) 数据同步方法、装置、电子设备和存储介质
CN115617799A (zh) 一种数据存储的方法、装置、设备及存储介质
CN110837499B (zh) 数据访问处理方法、装置、电子设备和存储介质
CN114372064A (zh) 数据处理装置、方法、计算机可读介质及处理器
CN113296973A (zh) 一种消息处理方法、消息读取方法、装置及可读介质
CN114553762A (zh) 一种对流表中的流表项处理的方法及装置
CN113297267A (zh) 数据缓存和任务处理方法、装置、设备以及存储介质
TW201445987A (zh) 傳輸資訊的方法及裝置
CN113849524B (zh) 一种数据处理方法及装置
CN110347656B (zh) 文件存储系统中请求的管理方法和装置
CN113297245A (zh) 获取执行信息的方法及装置
CN113296977B (zh) 一种消息处理方法及装置
CN113448739B (zh) 一种数据处理方法及装置
CN112182507A (zh) 数据质量的度量方法、装置及设备
CN113448986B (zh) 一种查询方法、设备、存储介质及程序产品
CN113709044B (zh) 数据转发方法、装置、电子设备和存储介质
CN117041980B (zh) 一种网元管理方法、装置、存储介质及电子设备
CN112783925B (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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40058000

Country of ref document: HK