CN113296977B - 一种消息处理方法及装置 - Google Patents

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

Info

Publication number
CN113296977B
CN113296977B CN202110205997.4A CN202110205997A CN113296977B CN 113296977 B CN113296977 B CN 113296977B CN 202110205997 A CN202110205997 A CN 202110205997A CN 113296977 B CN113296977 B CN 113296977B
Authority
CN
China
Prior art keywords
message
messages
queue
consumption
sorted
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
CN202110205997.4A
Other languages
English (en)
Other versions
CN113296977A (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 CN202110205997.4A priority Critical patent/CN113296977B/zh
Publication of CN113296977A publication Critical patent/CN113296977A/zh
Application granted granted Critical
Publication of CN113296977B publication Critical patent/CN113296977B/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q30/00Commerce
    • G06Q30/06Buying, selling or leasing transactions
    • G06Q30/0601Electronic shopping [e-shopping]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Business, Economics & Management (AREA)
  • Finance (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Accounting & Taxation (AREA)
  • General Engineering & Computer Science (AREA)
  • Development Economics (AREA)
  • Economics (AREA)
  • Marketing (AREA)
  • Strategic Management (AREA)
  • General Business, Economics & Management (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本申请提供了一种消息处理方法及装置。获取第一消息的排序线索,该排序线索用于确定第一消息在用于供消费方消费的多个消息中的消费顺序。在第一消息中添加排序线索。向多个代理服务器中的任意一个代理服务器发送已添加排序线索的第一消息,以使在任意一个代理服务器中缓存已添加排序线索的第一消息。通过本申请,可以支持消费方获取多个代理服务器分别缓存的用于供消费方消费的消息,然后获取得到的多个消息中的各个消息的排序线索;各个消息的排序线索用于确定各个消息在多个消息中的消费顺序;并按照各个消息的排序线索获取各个消息在多个消息中的消费顺序;再根据各个消息在多个消息中的消费顺序对各个消息依次进行消费。

Description

一种消息处理方法及装置
技术领域
本申请涉及计算机技术领域,特别是涉及一种消息处理方法及装置。
背景技术
在消息的“生产-消费”的应用场景中,生产方可以生产多个消息,以供消费方消费。
在一些可能的情况下,生产方生产的多个消息之间是具有消费顺序的,消费方需要按照多个消息之间的消费顺序依次消费多个消息中的各个消息。
然而,如何使得消费方能够按照多个消息之间的消费顺序依次消费多个消息中的各个消息是一个亟待解决的技术问题。
发明内容
本申请示出了一种消息处理方法及装置。
第一方面,本申请示出了一种消息处理方法,应用于生产方,所述方法包括:
在得到用于供消费方消费的第一消息的情况下,获取所述第一消息的排序线索,所述排序线索用于确定所述第一消息在用于供所述消费方消费的多个消息中的消费顺序;
在所述第一消息中添加所述排序线索;
向多个代理服务器中的任意一个代理服务器发送已添加所述排序线索的第一消息,以使在所述任意一个代理服务器中缓存已添加所述排序线索的第一消息。
在一个可选的实现方式中,所述获取所述第一消息的排序线索,包括:
确定所述多个代理服务器中是否缓存有第二消息,所述第二消息包括所述多个消息中的除所述第一消息以外的消息;
在所述多个代理服务器缓存有所述第二消息的情况下,设置所述第一消息在所述多个消息中的消费顺序的排序线索,所述排序线索用于指示所述第一消息的消费顺序位于所述第二消息的消费顺序之后。
在一个可选的实现方式中,所述获取所述第一消息的排序线索,包括:
获取所述多个代理服务器中的各个代理服务器分别缓存的消息的已缓存数量;
根据各个已缓存数量获取所述第一消息的排序线索。
第二方面,本申请示出了一种消息处理方法,应用于消费方,所述方法包括:
获取多个代理服务器分别缓存的消息,所述多个代理服务器中缓存的消息用于供消费方消费;
获取得到的多个消息中的各个消息的排序线索;各个消息的排序线索用于确定各个消息在所述多个消息中的消费顺序;
按照各个消息的排序线索获取各个消息在所述多个消息中的消费顺序;
根据各个消息在所述多个消息中的消费顺序对各个消息依次进行消费。
在一个可选的实现方式中,所述排序线索是根据消息被生产方向代理服务器发送之前各个代理服务器中分别缓存的消息的已缓存数量获取到的;
或者,
所述排序线索是根据在消息被生产方向任意一个代理服务器发送之前所述多个代理服务器缓存的已缓存消息设置的;
或者,
所述排序线索是根据消息在被代理服务器接收时的接收时刻获取到的。
在一个可选的实现方式中,所述按照各个消息的排序线索获取各个消息在所述多个消息中的消费顺序,包括:
对于每一个代理服务器,将从所述代理服务器得到的消息存储在一个待排序队列中;
分别获取各个待排序队列中的消费顺序为首位的目标消息,将各个目标消息分别存储在选举队列中;
获取所述选举队列中的、排序线索用于指示消费顺序为首位的候选消息,将所述候选消息存储在已排序队列中;
将所述候选消息从所述候选消息所属的待排序队列中删除以及从所述候选消息所属的选举队列中删除;
获取所述候选消息所属的待排序队列中的消费顺序为首位的目标消息,将所述候选消息所属的待排序队列中的消费顺序为首位的目标消息存储在选举队列中,然后执行所述获取所述选举队列中的、排序线索用于指示消费顺序为首位的候选消息的步骤,直至获取的消息均存储在所述已排序队列为止;
其中,存储在所述已排序队列越早的消息在已排序队列中的消息位点比存储在所述已排序队列越晚的消息在已排序队列中的消息位点靠前。
在一个可选的实现方式中,所述获取所述选举队列中的、排序线索用于指示消费顺序为首位的候选消息,包括:
根据各个代理服务器中分别缓存的消息的已缓存数量,在所述选举队列中选择最小的已缓存数量对应的消息;
在最小的已缓存数量对应的消息为一个的情况下,将所述最小的已缓存数量对应的消息确定为所述候选消息;
在最小的已缓存数量对应的消息为至少两个的情况下,获取至少两个消息分别被代理服务器接收的接收时刻,在至少两个消息中选择最早的接收时刻对应的消息,并作为所述候选消息。
在一个可选的实现方式中,所述获取所述候选消息所属的待排序队列中的消费顺序为首位的目标消息,包括:
判断所述候选消息所属的待排序队列中是否还存在消息;
在所述候选消息所属的待排序队列中不存在消息的情况下,从所述候选消息所属的待排序队列对应的代理服务器中,拉取供所述消费方消费的多个消息中的新消息;
在所述新消息中获取消费顺序为首位的目标消息。
在一个可选的实现方式中,所述获取所述选举队列中的、排序线索用于指示消费顺序为首位的候选消息,包括:
在所述选举队列中的除所述新消息以外的消息中,获取消费顺序为首位的候选消息。
在一个可选的实现方式中,所述分别获取各个待排序队列中的消费顺序为首位的目标消息,包括:
对于任意一个待排序队列,在所述待排序队列中的多个消息中,选择在所述待排序队列对应的代理服务器中的消息位点为首位的消息,并作为所述目标消息。
在一个可选的实现方式中,所述将所述候选消息存储在已排序队列中,包括:
在已排序队列中的已存储的消息之后的消息位点存储所述候选消息。
第三方面,本申请示出了一种消息处理装置,应用于生产方,所述装置包括:
第一获取模块,用于在得到用于供消费方消费的第一消息的情况下,获取所述第一消息的排序线索,所述排序线索用于确定所述第一消息在用于供所述消费方消费的多个消息中的消费顺序;
添加模块,用于在所述第一消息中添加所述排序线索;
发送模块,用于向多个代理服务器中的任意一个代理服务器发送已添加所述排序线索的第一消息,以使在所述任意一个代理服务器中缓存已添加所述排序线索的第一消息。
在一个可选的实现方式中,所述第一获取模块包括:
确定子模块,用于确定所述多个代理服务器中是否缓存有第二消息,所述第二消息包括所述多个消息中的除所述第一消息以外的消息;
设置子模块,用于在所述多个代理服务器缓存有所述第二消息的情况下,设置所述第一消息在所述多个消息中的消费顺序的排序线索,所述排序线索用于指示所述第一消息的消费顺序位于所述第二消息的消费顺序之后。
在一个可选的实现方式中,所述第一获取模块包括:
第一获取子模块,用于获取所述多个代理服务器中的各个代理服务器分别缓存的消息的已缓存数量;
第二获取子模块,用于根据各个已缓存数量获取所述第一消息的排序线索。
第四方面,本申请示出了一种消息处理装置,应用于消费方,所述装置包括:
第二获取模块,用于获取多个代理服务器分别缓存的消息,所述多个代理服务器中缓存的消息用于供消费方消费;
第三获取模块,用于获取得到的多个消息中的各个消息的排序线索;各个消息的排序线索用于确定各个消息在所述多个消息中的消费顺序;
第四获取模块,用于按照各个消息的排序线索获取各个消息在所述多个消息中的消费顺序;
消费模块,用于根据各个消息在所述多个消息中的消费顺序对各个消息依次进行消费。
在一个可选的实现方式中,所述排序线索是根据消息被生产方向代理服务器发送之前各个代理服务器中分别缓存的消息的已缓存数量获取到的;
或者,
所述排序线索是根据在消息被生产方向任意一个代理服务器发送之前所述多个代理服务器缓存的已缓存消息设置的;
或者,
所述排序线索是根据消息在被代理服务器接收时的接收时刻获取到的。
在一个可选的实现方式中,所述第四获取模块包括:
第一存储子模块,用于对于每一个代理服务器,将从所述代理服务器得到的消息存储在一个待排序队列中;
第三获取子模块,用于分别获取各个待排序队列中的消费顺序为首位的目标消息;
第二存储子模块,用于将各个目标消息分别存储在选举队列中;
第四获取子模块,用于获取所述选举队列中的、排序线索用于指示消费顺序为首位的候选消息;
第三存储子模块,用于将所述候选消息存储在已排序队列中;
删除子模块,用于将所述候选消息从所述候选消息所属的待排序队列中删除以及从所述候选消息所属的选举队列中删除;
第五获取子模块,用于获取所述候选消息所属的待排序队列中的消费顺序为首位的目标消息;
第四存储子模块,用于将所述候选消息所属的待排序队列中的消费顺序为首位的目标消息存储在选举队列中;
所述第四获取子模块还用于:获取所述选举队列中的、排序线索用于指示消费顺序为首位的候选消息,直至获取的消息均存储在所述已排序队列为止;
其中,存储在所述已排序队列越早的消息在已排序队列中的消息位点比存储在所述已排序队列越晚的消息在已排序队列中的消息位点靠前。
在一个可选的实现方式中,所述第四获取子模块包括:
第一选择单元,用于根据各个代理服务器中分别缓存的消息的已缓存数量,在所述选举队列中选择最小的已缓存数量对应的消息;
确定单元,用于在最小的已缓存数量对应的消息为一个的情况下,将所述最小的已缓存数量对应的消息确定为所述候选消息;
第一获取单元,用于在最小的已缓存数量对应的消息为至少两个的情况下,获取至少两个消息分别被代理服务器接收的接收时刻,第二选择单元,用于在至少两个消息中选择最早的接收时刻对应的消息,并作为所述候选消息。
在一个可选的实现方式中,所述第三获取子模块包括:
判断单元,用于判断所述候选消息所属的待排序队列中是否还存在消息;
拉取单元,用于在所述候选消息所属的待排序队列中不存在消息的情况下,从所述候选消息所属的待排序队列对应的代理服务器中,拉取供所述消费方消费的多个消息中的新消息;
第二获取单元,用于在所述新消息中获取消费顺序为首位的目标消息。
在一个可选的实现方式中,所述第四获取子模块包括:
第三获取单元,用于在所述选举队列中的除所述新消息以外的消息中,获取消费顺序为首位的候选消息。
在一个可选的实现方式中,所述第三获取子模块包括:
第三选择单元,用于对于任意一个待排序队列,在所述待排序队列中的多个消息中,选择在所述待排序队列对应的代理服务器中的消息位点为首位的消息,并作为所述目标消息。
在一个可选的实现方式中,所述第三存储子模块包括:
存储单元,用于在已排序队列中的已存储的消息之后的消息位点存储所述候选消息。
第五方面,本申请示出了一种电子设备,所述电子设备包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行如第一方面所述的消息处理方法。
第六方面,本申请示出了一种非临时性计算机可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如第一方面所述的消息处理方法。
第七方面,本申请示出了一种计算机程序产品,当所述计算机程序产品中的指令由电子设备的处理器执行时,使得电子设备能够执行如第一方面所述的消息处理方法。
第八方面,本申请示出了一种电子设备,所述电子设备包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行如第二方面所述的消息处理方法。
第九方面,本申请示出了一种非临时性计算机可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如第二方面所述的消息处理方法。
第十方面,本申请示出了一种计算机程序产品,当所述计算机程序产品中的指令由电子设备的处理器执行时,使得电子设备能够执行如第二方面所述的消息处理方法。
与现有技术相比,本申请实施例包括以下优点:
第一方面以及第三方面的有益效果包括:
在本申请中,在得到用于供消费方消费的第一消息的情况下,获取第一消息的排序线索,该排序线索用于确定第一消息在用于供消费方消费的多个消息中的消费顺序。在第一消息中添加排序线索。向多个代理服务器中的任意一个代理服务器发送已添加排序线索的第一消息,以使在任意一个代理服务器中缓存已添加排序线索的第一消息。
通过本申请,可以支持消费方获取多个代理服务器分别缓存的用于供消费方消费的消息,然后获取得到的多个消息中的各个消息的排序线索;各个消息的排序线索用于确定各个消息在多个消息中的消费顺序;并按照各个消息的排序线索获取各个消息在多个消息中的消费顺序;再根据各个消息在多个消息中的消费顺序对各个消息依次进行消费。
如此可以使得在供消费方顺序消费的多个消息被生产方经由不同的代理服务器发送给消费方的情况下,消费方能够按照各个消息的消费顺序对从不同的代理服务器中得到的消息依次进行顺序消费。
以及,通过本申请,可以使得生产方在经由代理服务器向消费方发送用于供消费方顺序消费的多个消息的过程中,如果某一代理服务器故障,生产方也可以经由其他代理服务器向消费方继续发送用于供消费方顺序消费的剩余的消息,不影响生产方向代理服务器发送用于供消费方顺序消费的剩余的消息的流程。
由于可以使得生产方经由不同的代理服务器向消费方发送供消费方消费的消息,因此,使得生产方可以并行地向消费方发送供消费方消费的消息,从而可以提高消息的传输效率。
第二方面以及第四方面的有益效果包括:
在本申请中,获取多个代理服务器分别缓存的消息,多个代理服务器中缓存的消息用于供消费方消费。获取得到的多个消息中的各个消息的排序线索;各个消息的排序线索用于确定各个消息在所述多个消息中的消费顺序。按照各个消息的排序线索获取各个消息在所述多个消息中的消费顺序。根据各个消息在所述多个消息中的消费顺序对各个消息依次进行消费。
通过本申请,在供消费方顺序消费的多个消息被生产方经由不同的代理服务器发送给消费方的情况下,消费方能够按照各个消息的消费顺序对从不同的代理服务器中得到的消息依次进行顺序消费。
如此,可以支持“生产方在经由代理服务器向消费方发送用于供消费方顺序消费的多个消息的过程中,如果某一代理服务器故障,生产方也可以经由其他代理服务器向消费方继续发送用于供消费方顺序消费的剩余的消息”,不影响生产方向代理服务器发送用于供消费方顺序消费的剩余的消息的流程。
由于可以支持生产方经由不同的代理服务器向消费方发送供消费方消费的消息,因此,可以支持生产方并行地向消费方发送供消费方消费的消息,从而可以提高消息的传输效率。
附图说明
图1是本申请一示例性实施例示出的一种消息处理系统的结构框图。
图2是本申请一示例性实施例示出的一种消息处理方法的流程示意图。
图3是本申请一示例性实施例示出的一种消息处理方法的流程示意图。
图4是本申请一示例性实施例示出的一种消息处理方法的流程示意图。
图5是本申请一示例性实施例示出的一种消息处理装置的结构框图。
图6是本申请一示例性实施例示出的一种消息处理装置的结构框图。
图7是本申请一示例性实施例提供的装置的结构示意图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
图1示出了本申请的一种消息处理系统的结构框图,该系统包括至少一个生产方01、代理服务器集群(其中包括至少一个代理服务器02)以及至少一个消费方03。
对于任意一个生产方01,该生产方01分别与每一个代理服务器02之间通信连接,对于其他每一个生产方01,同样如此。
对于任意一个消费方03,该消费方03分别与每一个代理服务器02之间通信连接,对于其他每一个消费方03,同样如此。
生产方01可以生产用于供消费方03消费的消息,然后将消息发送至消费方03,以供消费方03消费。
在生产方01将消息发送至消费方03的过程中,可以借助代理服务器02,例如,生产方01可以将消息发送至代理服务器02,以使代理服务器02将消息转发至消费方03,消费方03可以接收代理服务器02转发的消息,并对消息进行消费。
在图1所示的系统中,在一个方式中,其中一个生产方01可以生产多个消息,多个消息均用于供一个消费方03消费,多个消息之间具有消费顺序,该一个消费方03可以按照多个消息之间的消费顺序对多个消息依次进行消费。
在另一个方式中,至少两个生产方01可以分别生产至少一个消息,如此,至少两个生产方01一共生产多个消息,多个消息均用于供同一个消费方03消费,多个消息之间具有消费顺序,该一个消费方03可以按照多个消息之间的消费顺序对多个消息依次进行消费。
可见,消费方03消费的多个消息可以是由一个生产方生产的,也可以是由多个生产方共同生产的。
其中,图1所示的系统中以两个生产方01、三个代理服务器02以及一个消费方03为例进行举例说明,但不作为对本申请保护范围的限制。
图2示出了本申请的一种消息处理方法的流程示意图,该方法分别应用于图1所示的每一个生产方01中,该方法可以包括:
在步骤S101中,生产用于供消费方消费的第一消息。
在本申请中,生产方可以根据实际需求,生产用于供消费方消费的第一消息。第一消息可以为一个,也可以为至少两个。
在本申请中的消息包括即时通讯消息以及通知消息等。
在本申请中,在图1所示的系统中传递的消息往往有很多,其中可能包括需要被顺序消费的消息以及不需要被顺序消费的消息等,在需要被顺序消费的消息中,可能存在需要被不同的消费方分别消费的消息。
例如,生产方生产的供消费方消费的消息有多个,分别为消息1、消息2、消息3、消息4、消息5、消息6、消息7以及消息8等。
其中,消息1、消息2、消息3以及消息4需要被消费方1顺序消费,消息5、消息6、消息7以及消息8需要被消费方2顺序消费。
由于生产方需要经由代理服务器将消息发送至消费方。因此,为了使得代理服务器可以获知哪些消息需要分发给哪些消费方消费,以及,为了使得消费方可以获知消费方得到的消息中哪些消息是需要被顺序消费的消息以及哪些消息是不需要被顺序消费的消息,在本申请一个实施例中,在生产方生产消息之后,可以在生产的消息中添加可以消费该消息的消费方的消费方标识,以标记该消息是供该消费方标识所对应的消费方消费的,以及,可以在生产的消息中添加该消息是否需要被顺序消费的顺序标识。
其中,在该消息不需要被顺序消费的情况下,可以在该消息中添加第一顺序标识,第一顺序标识用于指示该消息不需要被顺序消费。
或者,在该消息需要被顺序消费的情况下,可以在该消息中添加第二顺序标识,第二顺序标识用于指示该消息需要被顺序消费。
其次,需要被一个消费方在一个消费批次内顺序消费的消息往往为多个,为了使得消费方能够获知一共有哪些消息需要在一个消息批次内被顺序消费,生产方还可以在消息中添加消息所属的消费批次的批次标识以及在消息所属的消费批次中添加需要顺序消费的消息的总数量。
以供消费方根据批次标识以及总数量可以确定哪些消息需要在一个消费批次内被顺序消费。
为简化描述,本申请之后的方案以各个生产方分别生产的消息均供一个消费方顺序消费,且是需要在一个消费批次内顺序消费为例进行举例说明,但不作为对本申请保护范围的限制。
在步骤S102中,获取第一消息的排序线索,该排序线索用于确定第一消息在用于供消费方消费的多个消息中的消费顺序。
在本申请中,生产方生产的用于供消费方在同一消费批次内顺序消费的消息为多个,用于供消费方消费的多个消息可以由一个生产方生产,也可以由多个生产方联合生产(也即,每一个生产方生产多个消息中的至少一个消息)。
用于供消费方消费的多个消息无论是由一个生产方生产的还是由多个生产方联合生产的,多个消息之间具有消费顺序。
在一种可能的情况下,任意一个消息在多个消息中的消费顺序可以与生产方生产该消息的生产时刻相关。
例如,生产方生产该消息的生产时刻越早,则该消息在多个消息中的消费顺序越靠前,生产方生产该消息的生产时刻越晚,则该消息在多个消息中的消费顺序越靠后。
在本申请一个实施例中,如果多个消息均是由一个生产方生产的,通常情况下,生产方生产多个消息的过程往往是一个接一个地依次生产消息的过程,生产方可以根据消息的生产时刻来确定消息的消费顺序等,进而确定出消息在多个消息中的消息顺序的排序线索,以供消费方使用消息在多个消息中的消息顺序的排序线索确定消息在多个消息中的消费顺序。例如,按照消息的生产时刻由早至晚的顺序将多个消息排序,根据排序的顺序确定各个消息的消费顺序,进而确定出消息在多个消息中的消息顺序的排序线索。
然而,在本申请另一个实施例中,如果多个消息是由多个生产方联合生产的,则对于任意一个生产方而言,该生产方只生产多个消息中的部分消息,该生产方可以知晓该生产方自己生产的多个消息中的部分消息的生产时刻,如此,该生产方通过生产时刻可以知晓该生产方自己生产的部分消息之间的先后生产顺序,但该生产方无法确定其他生产方生产的多个消息中的其他消息的生产时刻,因此该生产方无法确定该生产方生产的部分消息中的每一个消息分别在所有生产方生成出的多个消息中的消费顺序,进而无法确定出每一个消息在多个消息中的消息顺序的排序线索,也就无法供消费方使用每一个消息在多个消息中的消息顺序的排序线索确定每一个消息分别在多个消息中的消费顺序。
在这种情况下,生产方就需要与代理服务器交互,以确定该生产方生产的部分消息中的每一个消息分别在多个消息中的消费顺序,进而使得代理服务器确定出每一个消息在多个消息中的消息顺序的排序线索,以供消费方使用每一个消息在多个消息中的消息顺序的排序线索确定每一个消息分别在多个消息中的消费顺序。
其中,每当一个生产方生产出多个消息中的一个消息,则这个生产方往往就会向代理服务器发送生产出的该消息。如此,通常情况下,多个消息中的消费顺序越靠前的消息被代理服务器接收的接收时刻越早,多个消息中的消费顺序越靠后的消息被代理服务器接收的接收时刻越晚。
在本申请中,对于任意一个生产方,在该生产方生产出多个消息中的其中一个消息之后,该生产方需要向代理服务器发送该消息,以使代理服务器能够缓存该消息,进而使得之后消费方可以从代理服务器获取到该消息并消费。对于其他每一个生产方,同样如此。
然而,在该生产方向代理服务器发送该消息之前,该生产方需要获取用于确定该消息在多个消息中的消费顺序的排序线索。
在一个可选的实现方式中,该生产方获取用于确定该消息在多个消息中的消费顺序的排序线索的流程,可以包括:
11)、确定多个代理服务器中是否缓存有第二消息,第二消息包括多个消息中的除第一消息以外的消息。
在本申请中,生产方可以向每一个代理服务器分别发送查询请求,该查询请求用于查询代理服务器中是否存储有多个消息中的第二消息。该查询请求可以携带消费方的消费方标识以及第一消息所属的消费批次的批次标识。
对于任意一个代理服务器,该代理服务器可以接收该查询请求,并从该查询请求中提取出该消费方标识以及该批次标识,然后在该代理服务器查询本地是否缓存有第二消息。
例如,在该代理服务器缓存的消息中查询是否存在包括该消费方标识以及该批次标识的消息。
如果代理服务器缓存的消息中存在包括该消费方标识以及该批次标识的消息,则将该消息作为第二消息,之后该代理服务器可以向生产方发送通知消息,该通知消息携带第二消息的消息标识,该通知消息用于通知该代理服务器本地缓存有第二消息。
如果代理服务器缓存的消息中不存在包括该消费方标识以及该批次标识的消息,则可以确定该代理服务器中不存在第二消息。之后该代理服务器可以向生产方发送通知消息,该通知消息用于通知该代理服务器本地未缓存第二消息。
对于其他每一个代理服务器,同样如此。
生产方可以接收各个代理服务器分别发送的通知消息,然后根据各个代理服务器分别发送的通知消息可以确定出各个代理服务器中当前缓存有多个消息中的哪些消息。
12)、在多个代理服务器中缓存有第二消息的情况下,设置用于确定第一消息在多个消息中的消费顺序的排序线索,该排序线索用于指示第一消息的消费顺序位于第二消息的消费顺序之后。
在本申请一个实施例中,在多个代理服务器缓存有第二消息的情况下,说明第二消息早于第一消息达到代理服务器,由于“通常情况下,多个消息中的消费顺序越靠前的消息被代理服务器接收的接收时刻越早,多个消息中的消费顺序越靠后的消息被代理服务器接收的接收时刻越晚”,因此,通常情况下,第一消息在多个消息中的消费顺序位于第二消息在多个消息中的消费顺序之后。
此时可以设置用于确定第一消息在多个消息中的消费顺序的排序线索,例如,可以获取第二消息的消息标识(该消息标识用于唯一标识第二消息,不同的消息的消息标识不同),然后根据第二消息的消息标识获取第一消息的排序线索,例如,可以将第二消息的消息标识作为第一消息的排序线索,其中,通过第二消息的消息标识可以标记出:第一消息在多个消息中的消费顺序位于第二消息在多个消息中的消费顺序之后。
另外,在本申请另一个实施例中,在多个代理服务器均未缓存有第二消息的情况下,在一种可能的情况下,第一消息是多个消息中的消费顺序为首位的消息,或者,在另一种可能的情况下,第一消息不是多个消息中的消费顺序为首位的消息,也即,多个消息中存在消费顺序比第一消息靠前的消息,只是此时消费顺序比第一消息靠前的消息还未被代理服务器接收到而已。
因此,此时对于生产方而言可能无法准确确定出第一消息在多个消息中的消费顺序,进而无法确定出第一消息在多个消息中的消费顺序的排序线索。
在这种情况下,一种可行的方法是:生产方直接向多个代理服务器中的任意一个代理服务器发送第一消息,以使在任意一个代理服务器在其中缓存第一消息。至于用于确定第一消息在多个消息中的消费顺序的排序线索,可以交由代理服务器来确定等。
或者,在一个可选的实现方式中,该生产方获取该消息在多个消息中的消费顺序的流程,可以包括:
21)、获取多个代理服务器中的各个代理服务器分别已缓存的消息的已缓存数量。
在本申请中,生产方可以向每一个代理服务器分别发送查询请求,该查询请求用于查询代理服务器中已缓存的消息的已缓存数量。
对于任意一个代理服务器,该代理服务器可以接收该查询请求,然后根据该查询请求查询代理服务器中分别已缓存的消息的已缓存数量,然后可以向生产方发送通知消息,该通知消息携带代理服务器中已缓存的消息的已缓存数量。
生产方可以接收各个代理服务器分别发送的通知消息,根据各个代理服务器分别发送的通知消息可以得到各个代理服务器中分别已缓存的消息的已缓存数量。
22)、根据各个已缓存数量获取第一消息的排序线索。
在本申请中,可以将各个代理服务器中分别已缓存的消息的已缓存数量作为第一消息的排序线索,如此可以标记出:在生产方将要向代理服务器中发送第一消息之前各个代理服务器中分别已缓存的消息的已缓存数量。
其中,生产方将要向代理服务器中发送消息之前各个代理服务器中分别已缓存的消息的已缓存数量越多,则该消息在多个消息中的消费顺序越靠后,生产方将要向代理服务器中发送消息之前各个代理服务器中分别已缓存的消息的已缓存数量越少,则该消息在多个消息中的消费顺序越靠前。以使得之后可以根据已缓存数量确定消息在多个消息中的消费顺序。
在步骤S103中,在第一消息中添加排序线索。
在本申请中,可以在第一消息中的特定的字段中添加排序线索等。
在步骤S104中,向多个代理服务器中的任意一个代理服务器发送已添加排序线索的第一消息,以使在任意一个代理服务器中缓存已添加排序线索的第一消息。
在本申请中,在多个代理服务器中,生产方可以默认选择一个特定的代理服务器用来发送供消费者消费的第一消息,然而,如果特定的代理服务器出现故障等原因而暂时无法正常工作,生产方可以选择向其他代理服务器发送第一消息,以使其他代理服务器缓存已添加排序线索的第一消息。
在本申请中,在得到用于供消费方消费的第一消息的情况下,获取第一消息的排序线索,该排序线索用于确定第一消息在用于供消费方消费的多个消息中的消费顺序。在第一消息中添加排序线索。向多个代理服务器中的任意一个代理服务器发送已添加排序线索的第一消息,以使在任意一个代理服务器中缓存已添加排序线索的第一消息。
通过本申请,可以支持消费方获取多个代理服务器分别缓存的用于供消费方消费的消息,然后获取得到的多个消息中的各个消息的排序线索;各个消息的排序线索用于确定各个消息在多个消息中的消费顺序;并按照各个消息的排序线索获取各个消息在多个消息中的消费顺序;再根据各个消息在多个消息中的消费顺序对各个消息依次进行消费。
如此可以使得在供消费方顺序消费的多个消息被生产方经由不同的代理服务器发送给消费方的情况下,消费方能够按照各个消息的消费顺序对从不同的代理服务器中得到的消息依次进行顺序消费。
以及,通过本申请,可以使得生产方在经由代理服务器向消费方发送用于供消费方顺序消费的多个消息的过程中,如果某一代理服务器故障,生产方也可以经由其他代理服务器向消费方继续发送用于供消费方顺序消费的剩余的消息,不影响生产方向代理服务器发送用于供消费方顺序消费的剩余的消息的流程。
由于可以使得生产方经由不同的代理服务器向消费方发送供消费方消费的消息,因此,使得生产方可以并行地向消费方发送供消费方消费的消息,从而可以提高消息的传输效率。
图3示出了本申请的一种消息处理方法的流程示意图,该方法应用于图1所示的消费方03中。该方法可以包括:
在步骤S201中,获取多个代理服务器分别缓存的消息,多个代理服务器中缓存的消息用于供消费方消费。
在本申请一个可能的例子中,多个代理服务器中缓存的消息用于供消费方消费是指:多个代理服务器中缓存的消息用于供同一个消费方消费。
在生产方生产出供消费方消费的多个消息并将多个消息发送至代理服务器的过程中或者过程之后,消费方就可以从代理服务器中获取多个消息并按照多个消息之间的消费顺序对多个消息依次进行消费。
在一个方式中,各个代理服务器可以主动向消费方推送代理服务器中缓存的、供消费方消费的消息,这样,对于消费方而言,是被动地接收各个代理服务器推送的供消费方消费的多个消息。
或者,在另一个方式中,消费方可以从代理服务器中主动拉取供消费方顺序消费的多个消息。例如,代理服务器可以向消费方通知代理服务器中具有供消费方消费的消息,消费方可以择时从代理服务器中拉取供消费方顺序消费的多个消息。
在一个例子中,消费方可以向各个代理服务器分别发送拉取请求,该拉取请求用于拉取代理服务器中缓存的供消费方顺序消费的多个消息,各个代理服务器分别接收该拉取请求,然后分别获取各自缓存的供消费方顺序消费的消息,并分别向消费方发送供消费方顺序消费的消息,然后消费方接收各个代理服务器分别发送的供消费方顺序消费的消息,从而得到供消费方消费的多个消息。
在步骤S202中,获取得到的多个消息中的各个消息的排序线索;各个消息的排序线索用于确定各个消息在所述多个消息中的消费顺序。
在本申请一个实施例中,参见图2所示的实施例的描述,消息的排序线索可以是根据“消息被生产方向代理服务器发送之前各个代理服务器中分别缓存的消息的已缓存数量”获取到的。
如此,对于从代理服务器中得到的任意一个消息,消费方可以获取该消息中的已缓存数量,并根据该消息中的已缓存数量确定该消息的排序线索,例如,将根据该消息中的已缓存数量作为该消息的排序线索等,该消息的排序线索用于确定该消息在多个消息中的消费顺序。
其中,由于“生产方将要向代理服务器中发送消息之前各个代理服务器中分别已缓存的消息的已缓存数量越多,则该消息在多个消息中的消费顺序越靠后,生产方将要向代理服务器中发送消息之前各个代理服务器中分别已缓存的消息的已缓存数量越少,则该消息在多个消息中的消费顺序越靠前”,如此可以根据已缓存数量确定消息的排序线索,消息的排序线索用于确定消息在多个消息中的消费顺序。
对于从代理服务器中得到的其他每一个消息,同样如此。
在本申请另一个实施例中,参见图2所示的实施例的描述,用于确定消息在多个消息中的消费顺序的排序线索可以是根据“在消息被生产方向任意一个代理服务器发送之前所述多个代理服务器缓存的已缓存消息设置的”设置的。
对于从代理服务器中得到的任意一个消息,消费方可以获取该消息中的第二消息的消息标识,并作为用于确定该消息在多个消息中的消费顺序的排序线索,第二消息的消息标识可以标记出:该消息在多个消息中的消费顺序位于第二消息在多个消息中的消费顺序之后。对于从代理服务器中得到的其他每一个消息,同样如此。
在本申请又一个实施例中,每当代理服务器接收到生产方发送的多个消息中的一个消息时,代理服务器就会获取代理服务器接收到该消息时的接收时刻,也即该消息被代理服务器接收时的接收时刻,代理服务器还会将该接收时刻添加在该消息中。如此,通过多个消息中的各个消息中的接收时刻由早至晚的顺序可以确定出各个消息被消费方消费的先后顺序。如此,用于确定消息在多个消息中的消费顺序的排序线索可以是根据消息在被代理服务器接收时的接收时刻获取到的。
因此,对于从代理服务器中得到的任意一个消息,消费方可以获取该消息中的、代理服务器接收到该消息时的接收时刻,并作为用于确定该消息在多个消息中的消费顺序的排序线索,对于从代理服务器中得到的其他每一个消息,同样如此。
在步骤S203中,按照各个消息的排序线索获取各个消息在多个消息中的消费顺序。
本步骤具体可以参见之后图4所示的实施例,在此不做详述。
在步骤S204中,根据各个消息在多个消息中的消费顺序对各个消息依次进行消费。
在本申请中,获取多个代理服务器分别缓存的消息,多个代理服务器中缓存的消息用于供消费方消费。获取得到的多个消息中的各个消息的排序线索;各个消息的排序线索用于确定各个消息在所述多个消息中的消费顺序。按照各个消息的排序线索获取各个消息在所述多个消息中的消费顺序。根据各个消息在所述多个消息中的消费顺序对各个消息依次进行消费。
通过本申请,在供消费方顺序消费的多个消息被生产方经由不同的代理服务器发送给消费方的情况下,消费方能够按照各个消息的消费顺序对从不同的代理服务器中得到的消息依次进行顺序消费。
如此,可以支持“生产方在经由代理服务器向消费方发送用于供消费方顺序消费的多个消息的过程中,如果某一代理服务器故障,生产方也可以经由其他代理服务器向消费方继续发送用于供消费方顺序消费的剩余的消息”,不影响生产方向代理服务器发送用于供消费方顺序消费的剩余的消息的流程。
由于可以支持生产方经由不同的代理服务器向消费方发送供消费方消费的消息,因此,可以支持生产方并行地向消费方发送供消费方消费的消息,从而可以提高消息的传输效率。
在本申请一个实施例中,参见图4,步骤S203中,可以按照排序线索对从多个代理服务器中得到的多个消息进行排序,从而确定出各个消息在多个消息中的消费顺序,具体流程包括:
在步骤S301中,对于每一个代理服务器,将从该代理服务器得到的消息存储在一个待排序队列中。
在步骤S302中,分别获取各个待排序队列中的消费顺序为首位的目标消息,将各个目标消息分别存储在选举队列中。
其中,在任意一个待排序队列中选择消费顺序为首位的目标消息时,选择的范围是该待排序队列中的消息,也即,是在该待排序队列中的消息中确定出一个消费顺序最靠前的目标消息。
由于“多个消息中的消费顺序越靠前的消息被代理服务器接收的接收时刻越早,多个消息中的消费顺序越靠后的消息被代理服务器接收的接收时刻越晚”,因此,对于任意一个待排序队列,在该待排序队列中的消息中,消费顺序为首位的消息可以为:在该待排序队列对应的代理服务器缓存的消息中,被该代理服务器接收的接收时刻最早的消息。
如此,在该待排序队列中的任意一个消息,可以从该消息中获取该消息被代理服务器接收的接收时刻,对于待排序队列中的其他每一个消息,同样执行上述操作,从而得到该待排序队列中的各个消息被代理服务器接收的接收时刻,然后在该待排序队列中选取最早的接收时刻对应的消息,并作为该待排序队列中的消费顺序为首位的目标消息,然后将目标消息存储在选举队列中。
对于其他每一个待排序队列,同样执行上述操作,如此实现在选举队列中存储各个待排序队列中的消费顺序为首位的消息。
或者,在另一个实施例中,由于多个消息中的消费顺序越靠前的消息被代理服务器接收的接收时刻越早,多个消息中的消费顺序越靠后的消息被代理服务器接收的接收时刻越晚,被代理服务器接收的接收时刻越早的消息被在代理服务器中的消息位点越靠前,被代理服务器接收的接收时刻越晚的消息被在代理服务器中的消息位点越靠后,消息位点为消息在代理服务器中的存储索引,可以理解为消息在代理服务器中的位置等。
对于任意一个待排序队列,可以在该待排序队列中的多个消息中,选择在该待排序队列对应的代理服务器中的消息位点为首位的消息,并作为目标消息。对于其他每一个待排序队列,同样如此。
在步骤S303中,获取选举队列中的、排序线索用于指示消费顺序为首位的候选消息,将候选消息存储在已排序队列中。
在本申请中,在选举队列中选择消费顺序为首位的候选消息时,选择的范围是选举队列中的消息,也即,是在选举队列中的消息中确定出一个、排序线索用于指示消费顺序最靠前的候选消息。
其中,获取选举队列中的、排序线索用于指示消费顺序为首位的候选消息的流程,具体可以包括:
3031、根据各个代理服务器中分别缓存的消息的已缓存数量,在选举队列中选择最小的已缓存数量对应的消息。
在本申请中,生产方将要向代理服务器中发送消息之前各个代理服务器中分别已缓存的消息的已缓存数量越多,则该消息在多个消息中的消费顺序越靠后,生产方将要向代理服务器中发送消息之前各个代理服务器中分别已缓存的消息的已缓存数量越少,则该消息在多个消息中的消费顺序越靠前。因此,选举队列中的、排序线索用于指示消费顺序为首位的候选消息往往是最小的已缓存数量对应的消息。
如此,可以获取选举队列中的各个目标消息中记录的已缓存数量,然后在选举队列中选择最小的已缓存数量对应的消息。
以一个例子对消息中记录的已缓存数量的比较进行举例说明,但不作为对本申请保护范围的限制。
在一个例子中,假设多个消息包括消息1和消息2,系统中包括代理服务器1、代理服务器2以及代理服务器3。
消息1中记录的已缓存数量为2、1以及2。第一个“2”代表在生产方向任意一个代理服务器发送消息1之前,代理服务器1中缓存有2个消息。“1”代表在生产方向任意一个代理服务器发送消息1之前,代理服务器2中缓存有1个消息。第二个“2”代表在生产方向任意一个代理服务器发送消息1之前,代理服务器3中缓存有2个消息。
消息2中记录的已缓存数量为3、1以及2。“3”代表在生产方向任意一个代理服务器发送消息2之前,代理服务器1中缓存有3个消息。“1”代表在生产方向任意一个代理服务器发送消息2之前,代理服务器2中缓存有1个消息。第二个“2”代表在生产方向任意一个代理服务器发送消息2之前,代理服务器3中缓存有2个消息。
如此,消息1中记录的已缓存数量为2、1以及2,与,消息2中记录的已缓存数量为3、1以及2,二者比较之后可见,消息1中的后两个已缓存数量与消息2中的后两个已缓存数量相同,消息1中的第一个已缓存数量2小于消息2中的第一个已缓存数量3,因此,消息1已缓存数量小于消息2的已缓存数量。
然而,在选举队列中选择的最小的已缓存数量对应的消息可能为一个,也可以为至少两个,因此,可以按照3022以及3033两种方式分别处理。
3032、在最小的已缓存数量对应的消息为一个的情况下,将最小的已缓存数量对应的消息确定为候选消息。
3032、在最小的已缓存数量对应的消息为至少两个的情况下,获取至少两个消息分别被代理服务器接收的接收时刻,在至少两个消息中选择最早的接收时刻对应的消息,并作为候选消息。
在本申请中,在最小的已缓存数量对应的消息为至少两个的情况下,则说明至少两个消息是不同的生产方分别向代理服务器发送的,且各个生产方在将要向代理服务器发送各自生产的消息之前,代理服务器中已缓存的消息的已缓存数量相同,这样,各个生产方在向代理服务器发送各自生产的消息之前是无法确定出至少两个消息之间的消费顺序的。因此,这时候需要消费方来确定至少两个消息之间的消费顺序。
在一种方式中,消费方可以在至少两个消息中随机选择一个消息作为候选消息。
然而,随机选择的消息可能是选举队列中的、排序线索用于指示消费顺序为首位的消息,也可能不是选举队列中的、排序线索用于指示消费顺序为首位的消息。
在选举队列中的消息越多的情况下,通过随机选择的方式选择出的消息是选举队列中的、排序线索用于指示消费顺序为首位的消息的概率越低。
因此,通过随机选择的方式很可能会导致实际选择的消息不是选举队列中的、排序线索用于指示消费顺序为首位的消息,因此会导致消费方很可能无法按照正确客观的消费顺序对多个消息依次进行消费。
因此,为了尽可能地能够使得消费方能够按照正确客观的消费顺序对多个消息依次进行消费。在本申请另一实施例中,可以获取至少两个消息分别被代理服务器接收的接收时刻,在至少两个消息中选择最早的接收时刻对应的消息,并作为候选消息。
由于多个消息中的消费顺序越靠前的消息被代理服务器接收的接收时刻越早,多个消息中的消费顺序越靠后的消息被代理服务器接收的接收时刻越晚,因此,本方式可以尽可能使得选择的消息是选举队列中的、排序线索用于指示消费顺序为首位的消息,如此可以尽可能地使得消费方能够按照正确客观的消费顺序对多个消息依次进行消费。
在本申请中,对于将候选消息存储在已排序队列中这一步骤,在将候选消息存储在已排序队列之前,如果此时已排序队列中未存储消息,则说明候选消息为需要顺序消费的多个消息中的消费顺序为第一位的消息,可以将候选消息作为第一个消息存储在已排序队列中,且候选消息在已排序队列中的消息位点为第一位,消息位点为消息在已排序队列中的存储索引,可以理解为消息在已排序队列中的位置等。
或者,在将候选消息存储在已排序队列之前,如果此时已排序队列中存储有其他消息,则说明候选消息不是需要顺序消费的多个消息中的消费顺序为第一位的消息,可以在已排序队列中的其他消息之后存储该候选消息,例如,在已排序队列中的已存储的消息之后的消息位点存储该候选消息等,以使得在已排序队列中可以按照顺序存储各个消息,且各个消息在已排序队列中的消息位点的顺序与各个消息的消费顺序相同。
在一个例子中,候选消息在已排序队列中的消息位点于其他消息在已排序队列中的消息位点之后。
在将候选消息存储在已排序队列中之后,还需要继续至少对选举队列以及待排序队列中的消息继续进行排序,因此,可以执行步骤S304。
在步骤S304中,将候选消息从候选消息所属的待排序队列中删除以及从候选消息所属的选举队列中删除。
在步骤S305中,获取候选消息所属的待排序队列中的消费顺序为首位的目标消息,将候选消息所属的待排序队列中的消费顺序为首位的目标消息存储在选举队列中,然后返回执行步骤S303:获取选举队列中的、排序线索用于指示消费顺序为首位的候选消息,将候选消息存储在已排序队列中。直至从各个代理服务器中分别得到的消息均存储在已排序队列为止。
从而完成对从各个代理服务器中分别得到的消息按照消费顺序进行排序的工作。
其中,存储在已排序队列越早的消息在已排序队列中的消息位点比存储在已排序队列越晚的消息在已排序队列中的消息位点靠前。
在本申请中,获取候选消息所属的待排序队列中的消费顺序为首位的目标消息流程,可以包括:
3051、判断候选消息所属的待排序队列中是否还存在消息。
在步骤S304中执行将候选消息从候选消息所属的待排序队列中删除以及从候选消息所属的选举队列中删除之后,可能就会出现一种情况,该候选消息所属的排序队列中不存在消息,也即,该待排序队列中的消息数量为0。
之后,在下一轮执行步骤S302的流程时,候选消息所属的待排序队列就没有消息参与排序,此时,该待排序队列对应的代理服务器可能新接收到了多个消息中至少一个其他消息,因此,可以拉取代理服务器新接收到了多个消息中至少一个其他消息,并存储在该待排序队列中,以供之后对新接收到了多个消息中至少一个其他消息排序。
3052、在候选消息所属的待排序队列中不存在消息的情况下,从候选消息所属的待排序队列对应的代理服务器中,拉取供消费方消费的多个消息中的新消息。
在本申请中,消费方可以向该待排序队列对应的代理服务器发送拉取请求,该拉取请求用于拉取该待排序队列对应的代理服务器中缓存的供消费方顺序消费的消息,该待排序队列对应的代理服务器分别接收该拉取请求,然后在代理服务器中缓存的供消费方顺序消费的消息中,获取未向消费方发送过的消息,并向消费方发送获取的消息,然后消费方接收该待排序队列对应的代理服务器发送的消息。
3053、在新消息中获取消费顺序为首位的目标消息。
在本申请一个实施例中,在新消息为一个的情况下,则可以将该一个新消息作为消费顺序为首位的目标消息。
在本申请一个实施例中,在新消息为至少两个的情况下,可以参考步骤S302的流程,以从在新消息中获取消费顺序为首位的目标消息,在此不做详述。
在本申请另一个实施例中,候选消息所属的待排序队列对应的代理服务器不存在供消费方消费的多个消息中的消息,在这种情况下,候选消息所属的待排序队列不在参与后续的排序工作。
在一个例子中,如果多次从候选消息所属的待排序队列对应的代理服务器中都拉取不到供消费方消费的多个消息中的新消息,则候选消息所属的待排序队列不在参与后续的排序工作。
在本申请另一实施例中,在步骤S303中,在获取选举队列中的、排序线索用于指示消费顺序为首位的候选消息时,可以在选举队列中的除新消息以外的消息中获取消费顺序为首位的候选消息。
由于多个消息中的消费顺序越靠前的消息被代理服务器接收的接收时刻越早,多个消息中的消费顺序越靠后的消息被代理服务器接收的接收时刻越晚,因此,选举队列中的新消息的消费顺序往往晚于选举队列中的除新消息以外的其他消息的消费顺序。
如此,在获取选举队列中的、排序线索用于指示消费顺序为首位的候选消息时,不需要考虑新消息,可以只考虑除新消息以外的消息即可,从而可以减少排序消耗的计算资源。
然而,在本申请另一个实施例中,并不是在代理服务器接收到供消费方顺序消费的多个消息中的全部消息之后才向消费方推送全部消息,或者,并不是在代理服务器接收到供消费方顺序消费的多个消息中的全部消息之后消费方才从代理服务器主动拉取全部消息。
而是在代理服务器中接收到至少供消费方顺序消费的多个消息中的一个消息之后,代理服务器就可以向消费方推送接收到的消息,或者,消费方就可以从代理服务器主动拉取代理服务器接收到消息,在消费方对得到的消息排序的过程中,也可以同时再从代理服务器中拉取代理服务器新接收到的多个消息中的其他消息。
也即,消费方从代理服务器中获取用于供消费方消费的消息的流程,以及,消费方对从代理服务器中已获取的用于供消费方消费的消息进行排序的流程,可以是并行执行的,两个流程可以通过消费方中不同的线程执行,二者互不干扰。
参照图5,示出了本申请的一种消息处理装置的实施例的结构框图,应用于生产方,所述装置包括:
第一获取模块11,用于在得到用于供消费方消费的第一消息的情况下,获取所述第一消息的排序线索,所述排序线索用于确定所述第一消息在用于供所述消费方消费的多个消息中的消费顺序;
添加模块12,用于在所述第一消息中添加所述排序线索;
发送模块13,用于向多个代理服务器中的任意一个代理服务器发送已添加所述排序线索的第一消息,以使在所述任意一个代理服务器中缓存已添加所述排序线索的第一消息。
在一个可选的实现方式中,所述第一获取模块包括:
确定子模块,用于确定所述多个代理服务器中是否缓存有第二消息,所述第二消息包括所述多个消息中的除所述第一消息以外的消息;
设置子模块,用于在所述多个代理服务器缓存有所述第二消息的情况下,设置所述第一消息在所述多个消息中的消费顺序的排序线索,所述排序线索用于指示所述第一消息的消费顺序位于所述第二消息的消费顺序之后。
在一个可选的实现方式中,所述第一获取模块包括:
第一获取子模块,用于获取所述多个代理服务器中的各个代理服务器分别缓存的消息的已缓存数量;
第二获取子模块,用于根据各个已缓存数量获取所述第一消息的排序线索。
在本申请中,在得到用于供消费方消费的第一消息的情况下,获取第一消息的排序线索,该排序线索用于确定第一消息在用于供消费方消费的多个消息中的消费顺序。在第一消息中添加排序线索。向多个代理服务器中的任意一个代理服务器发送已添加排序线索的第一消息,以使在任意一个代理服务器中缓存已添加排序线索的第一消息。
通过本申请,可以支持消费方获取多个代理服务器分别缓存的用于供消费方消费的消息,然后获取得到的多个消息中的各个消息的排序线索;各个消息的排序线索用于确定各个消息在多个消息中的消费顺序;并按照各个消息的排序线索获取各个消息在多个消息中的消费顺序;再根据各个消息在多个消息中的消费顺序对各个消息依次进行消费。
如此可以使得在供消费方顺序消费的多个消息被生产方经由不同的代理服务器发送给消费方的情况下,消费方能够按照各个消息的消费顺序对从不同的代理服务器中得到的消息依次进行顺序消费。
以及,通过本申请,可以使得生产方在经由代理服务器向消费方发送用于供消费方顺序消费的多个消息的过程中,如果某一代理服务器故障,生产方也可以经由其他代理服务器向消费方继续发送用于供消费方顺序消费的剩余的消息,不影响生产方向代理服务器发送用于供消费方顺序消费的剩余的消息的流程。
由于可以使得生产方经由不同的代理服务器向消费方发送供消费方消费的消息,因此,使得生产方可以并行地向消费方发送供消费方消费的消息,从而可以提高消息的传输效率。
参照图6,示出了本申请的一种消息处理装置的实施例的结构框图,应用于消费方,所述装置包括:
第二获取模块21,用于获取多个代理服务器分别缓存的消息,所述多个代理服务器中缓存的消息用于供消费方消费;
第三获取模块22,用于获取得到的多个消息中的各个消息的排序线索;各个消息的排序线索用于确定各个消息在所述多个消息中的消费顺序;
第四获取模块23,用于按照各个消息的排序线索获取各个消息在所述多个消息中的消费顺序;
消费模块24,用于根据各个消息在所述多个消息中的消费顺序对各个消息依次进行消费。
在一个可选的实现方式中,所述排序线索是根据消息被生产方向代理服务器发送之前各个代理服务器中分别缓存的消息的已缓存数量获取到的;
或者,
所述排序线索是根据在消息被生产方向任意一个代理服务器发送之前所述多个代理服务器缓存的已缓存消息设置的;
或者,
所述排序线索是根据消息在被代理服务器接收时的接收时刻获取到的。
在一个可选的实现方式中,所述第四获取模块包括:
第一存储子模块,用于对于每一个代理服务器,将从所述代理服务器得到的消息存储在一个待排序队列中;
第三获取子模块,用于分别获取各个待排序队列中的消费顺序为首位的目标消息;
第二存储子模块,用于将各个目标消息分别存储在选举队列中;
第四获取子模块,用于获取所述选举队列中的、排序线索用于指示消费顺序为首位的候选消息;
第三存储子模块,用于将所述候选消息存储在已排序队列中;
删除子模块,用于将所述候选消息从所述候选消息所属的待排序队列中删除以及从所述候选消息所属的选举队列中删除;
第五获取子模块,用于获取所述候选消息所属的待排序队列中的消费顺序为首位的目标消息;
第四存储子模块,用于将所述候选消息所属的待排序队列中的消费顺序为首位的目标消息存储在选举队列中;
所述第四获取子模块还用于:获取所述选举队列中的、排序线索用于指示消费顺序为首位的候选消息,直至获取的消息均存储在所述已排序队列为止;
其中,存储在所述已排序队列越早的消息在已排序队列中的消息位点比存储在所述已排序队列越晚的消息在已排序队列中的消息位点靠前。
在一个可选的实现方式中,所述第四获取子模块包括:
第一选择单元,用于根据各个代理服务器中分别缓存的消息的已缓存数量,在所述选举队列中选择最小的已缓存数量对应的消息;
确定单元,用于在最小的已缓存数量对应的消息为一个的情况下,将所述最小的已缓存数量对应的消息确定为所述候选消息;
第一获取单元,用于在最小的已缓存数量对应的消息为至少两个的情况下,获取至少两个消息分别被代理服务器接收的接收时刻,第二选择单元,用于在至少两个消息中选择最早的接收时刻对应的消息,并作为所述候选消息。
在一个可选的实现方式中,所述第三获取子模块包括:
判断单元,用于判断所述候选消息所属的待排序队列中是否还存在消息;
拉取单元,用于在所述候选消息所属的待排序队列中不存在消息的情况下,从所述候选消息所属的待排序队列对应的代理服务器中,拉取供所述消费方消费的多个消息中的新消息;
第二获取单元,用于在所述新消息中获取消费顺序为首位的目标消息。
在一个可选的实现方式中,所述第四获取子模块包括:
第三获取单元,用于在所述选举队列中的除所述新消息以外的消息中,获取消费顺序为首位的候选消息。
在一个可选的实现方式中,所述第三获取子模块包括:
第三选择单元,用于对于任意一个待排序队列,在所述待排序队列中的多个消息中,选择在所述待排序队列对应的代理服务器中的消息位点为首位的消息,并作为所述目标消息。
在一个可选的实现方式中,所述第三存储子模块包括:
存储单元,用于在已排序队列中的已存储的消息之后的消息位点存储所述候选消息。
在本申请中,获取多个代理服务器分别缓存的消息,多个代理服务器中缓存的消息用于供消费方消费。获取得到的多个消息中的各个消息的排序线索;各个消息的排序线索用于确定各个消息在所述多个消息中的消费顺序。按照各个消息的排序线索获取各个消息在所述多个消息中的消费顺序。根据各个消息在所述多个消息中的消费顺序对各个消息依次进行消费。
通过本申请,在供消费方顺序消费的多个消息被生产方经由不同的代理服务器发送给消费方的情况下,消费方能够按照各个消息的消费顺序对从不同的代理服务器中得到的消息依次进行顺序消费。
如此,可以支持“生产方在经由代理服务器向消费方发送用于供消费方顺序消费的多个消息的过程中,如果某一代理服务器故障,生产方也可以经由其他代理服务器向消费方继续发送用于供消费方顺序消费的剩余的消息”,不影响生产方向代理服务器发送用于供消费方顺序消费的剩余的消息的流程。
由于可以支持生产方经由不同的代理服务器向消费方发送供消费方消费的消息,因此,可以支持生产方并行地向消费方发送供消费方消费的消息,从而可以提高消息的传输效率。
本申请实施例还提供了一种非易失性可读存储介质,该存储介质中存储有一个或多个模块(programs),该一个或多个模块被应用在设备时,可以使得该设备执行本申请实施例中各方法步骤的指令(instructions)。
本申请实施例提供了一个或多个机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得电子设备执行如上述实施例中一个或多个所述的方法。本申请实施例中,所述电子设备包括服务器、网关、子设备等,子设备为物联网设备等设备。
本公开的实施例可被实现为使用任意适当的硬件,固件,软件,或及其任意组合进行想要的配置的装置,该装置可包括服务器(集群)、终端设备如IoT设备等电子设备。
图7示意性地示出了可被用于实现本申请中所述的各个实施例的示例性装置1300。
对于一个实施例,图7示出了示例性装置1300,该装置具有一个或多个处理器1302、被耦合到(一个或多个)处理器1302中的至少一个的控制模块(芯片组)1304、被耦合到控制模块1304的存储器1306、被耦合到控制模块1304的非易失性存储器(NVM)/存储设备1308、被耦合到控制模块1304的一个或多个输入/输出设备1310,和被耦合到控制模块1306的网络接口1312。
处理器1302可包括一个或多个单核或多核处理器,处理器1302可包括通用处理器或专用处理器(例如图形处理器、应用处理器、基频处理器等)的任意组合。在一些实施例中,装置1300能够作为本申请实施例中所述网关等服务器设备。
在一些实施例中,装置1300可包括具有指令1314的一个或多个计算机可读介质(例如,存储器1306或NVM/存储设备1308)和与该一个或多个计算机可读介质相合并被配置为执行指令1314以实现模块从而执行本公开中所述的动作的一个或多个处理器1302。
对于一个实施例,控制模块1304可包括任意适当的接口控制器,以向(一个或多个)处理器1302中的至少一个和/或与控制模块1304通信的任意适当的设备或组件提供任意适当的接口。
控制模块1304可包括存储器控制器模块,以向存储器1306提供接口。存储器控制器模块可以是硬件模块、软件模块和/或固件模块。
存储器1306可被用于例如为装置1300加载和存储数据和/或指令1314。对于一个实施例,存储器1306可包括任意适当的易失性存储器,例如,适当的DRAM。在一些实施例中,存储器1306可包括双倍数据速率类型四同步动态随机存取存储器(DDR4SDRAM)。
对于一个实施例,控制模块1304可包括一个或多个输入/输出控制器,以向NVM/存储设备1308及(一个或多个)输入/输出设备1310提供接口。
例如,NVM/存储设备1308可被用于存储数据和/或指令1314。NVM/存储设备1308可包括任意适当的非易失性存储器(例如,闪存)和/或可包括任意适当的(一个或多个)非易失性存储设备(例如,一个或多个硬盘驱动器(HDD)、一个或多个光盘(CD)驱动器和/或一个或多个数字通用光盘(DVD)驱动器)。
NVM/存储设备1308可包括在物理上作为装置1300被安装在其上的设备的一部分的存储资源,或者其可被该设备访问可不必作为该设备的一部分。例如,NVM/存储设备1308可通过网络经由(一个或多个)输入/输出设备1310进行访问。
(一个或多个)输入/输出设备1310可为装置1300提供接口以与任意其他适当的设备通信,输入/输出设备1310可以包括通信组件、拼音组件、传感器组件等。网络接口1312可为装置1300提供接口以通过一个或多个网络通信,装置1300可根据一个或多个无线网络标准和/或协议中的任意标准和/或协议来与无线网络的一个或多个组件进行无线通信,例如接入基于通信标准的无线网络,如WiFi、2G、3G、4G、5G等,或它们的组合进行无线通信。
对于一个实施例,(一个或多个)处理器1302中的至少一个可与控制模块1304的一个或多个控制器(例如,存储器控制器模块)的逻辑封装在一起。对于一个实施例,(一个或多个)处理器1302中的至少一个可与控制模块1304的一个或多个控制器的逻辑封装在一起以形成系统级封装(SiP)。对于一个实施例,(一个或多个)处理器1302中的至少一个可与控制模块1304的一个或多个控制器的逻辑集成在同一模具上。对于一个实施例,(一个或多个)处理器1302中的至少一个可与控制模块1304的一个或多个控制器的逻辑集成在同一模具上以形成片上系统(SoC)。
在各个实施例中,装置1300可以但不限于是:服务器、台式计算设备或移动计算设备(例如,膝上型计算设备、手持计算设备、平板电脑、上网本等)等终端设备。在各个实施例中,装置1300可具有更多或更少的组件和/或不同的架构。例如,在一些实施例中,装置1300包括一个或多个摄像机、键盘、液晶显示器(LCD)屏幕(包括触屏显示器)、非易失性存储器端口、多个天线、图形芯片、专用集成电路(ASIC)和扬声器。
本申请实施例提供了一种电子设备,包括:一个或多个处理器;和,其上存储有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述电子设备执行如本申请中一个或多个所述的消息处理方法。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、和流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程消息处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程消息处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程消息处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程消息处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例和落入本申请实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本申请所提供的一种消息处理方法及装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (26)

1.一种消息处理方法,其特征在于,应用于生产方,所述方法包括:
在得到用于供消费方消费的第一消息的情况下,获取所述第一消息的排序线索,所述排序线索用于确定所述第一消息在用于供所述消费方消费的多个消息中的消费顺序;
在所述第一消息中添加所述排序线索;
向多个代理服务器中的任意一个代理服务器发送已添加所述排序线索的第一消息,以使在所述任意一个代理服务器中缓存已添加所述排序线索的第一消息。
2.根据权利要求1所述的方法,其特征在于,所述获取所述第一消息的排序线索,包括:
确定所述多个代理服务器中是否缓存有第二消息,所述第二消息包括所述多个消息中的除所述第一消息以外的消息;
在所述多个代理服务器缓存有所述第二消息的情况下,设置所述第一消息在所述多个消息中的消费顺序的排序线索,所述排序线索用于指示所述第一消息的消费顺序位于所述第二消息的消费顺序之后。
3.根据权利要求1所述的方法,其特征在于,所述获取所述第一消息的排序线索,包括:
获取所述多个代理服务器中的各个代理服务器分别缓存的消息的已缓存数量;
根据各个已缓存数量获取所述第一消息的排序线索。
4.一种消息处理方法,其特征在于,应用于消费方,所述方法包括:
获取多个代理服务器分别缓存的消息,所述多个代理服务器中缓存的消息用于供消费方消费;
获取得到的多个消息中的各个消息的排序线索;各个消息的排序线索用于确定各个消息在所述多个消息中的消费顺序;
按照各个消息的排序线索获取各个消息在所述多个消息中的消费顺序;
根据各个消息在所述多个消息中的消费顺序对各个消息依次进行消费。
5.根据权利要求4所述的方法,其特征在于,
所述排序线索是根据消息被生产方向代理服务器发送之前各个代理服务器中分别缓存的消息的已缓存数量获取到的;
或者,
所述排序线索是根据在消息被生产方向任意一个代理服务器发送之前所述多个代理服务器缓存的已缓存消息设置的;
或者,
所述排序线索是根据消息在被代理服务器接收时的接收时刻获取到的。
6.根据权利要求5所述的方法,其特征在于,所述按照各个消息的排序线索获取各个消息在所述多个消息中的消费顺序,包括:
对于每一个代理服务器,将从所述代理服务器得到的消息存储在一个待排序队列中;
分别获取各个待排序队列中的消费顺序为首位的目标消息,将各个目标消息分别存储在选举队列中;
获取所述选举队列中的、排序线索用于指示消费顺序为首位的候选消息,将所述候选消息存储在已排序队列中;
将所述候选消息从所述候选消息所属的待排序队列中删除以及从所述候选消息所属的选举队列中删除;
获取所述候选消息所属的待排序队列中的消费顺序为首位的目标消息,将所述候选消息所属的待排序队列中的消费顺序为首位的目标消息存储在选举队列中,然后执行所述获取所述选举队列中的、排序线索用于指示消费顺序为首位的候选消息的步骤,直至获取的消息均存储在所述已排序队列为止;
其中,存储在所述已排序队列越早的消息在已排序队列中的消息位点比存储在所述已排序队列越晚的消息在已排序队列中的消息位点靠前。
7.根据权利要求6所述的方法,其特征在于,所述获取所述选举队列中的、排序线索用于指示消费顺序为首位的候选消息,包括:
根据各个代理服务器中分别缓存的消息的已缓存数量,在所述选举队列中选择最小的已缓存数量对应的消息;
在最小的已缓存数量对应的消息为一个的情况下,将所述最小的已缓存数量对应的消息确定为所述候选消息;
在最小的已缓存数量对应的消息为至少两个的情况下,获取至少两个消息分别被代理服务器接收的接收时刻,在至少两个消息中选择最早的接收时刻对应的消息,并作为所述候选消息。
8.根据权利要求7所述的方法,其特征在于,所述获取所述候选消息所属的待排序队列中的消费顺序为首位的目标消息,包括:
判断所述候选消息所属的待排序队列中是否还存在消息;
在所述候选消息所属的待排序队列中不存在消息的情况下,从所述候选消息所属的待排序队列对应的代理服务器中,拉取供所述消费方消费的多个消息中的新消息;
在所述新消息中获取消费顺序为首位的目标消息。
9.根据权利要求8所述的方法,其特征在于,所述获取所述选举队列中的、排序线索用于指示消费顺序为首位的候选消息,包括:
在所述选举队列中的除所述新消息以外的消息中,获取、排序线索用于指示消费顺序为首位的候选消息。
10.根据权利要求6所述的方法,其特征在于,所述分别获取各个待排序队列中的消费顺序为首位的目标消息,包括:
对于任意一个待排序队列,在所述待排序队列中的多个消息中,选择在所述待排序队列对应的代理服务器中的消息位点为首位的消息,并作为所述目标消息。
11.根据权利要求6所述的方法,其特征在于,所述将所述候选消息存储在已排序队列中,包括:
在已排序队列中的已存储的消息之后的消息位点存储所述候选消息。
12.一种消息处理装置,其特征在于,应用于生产方,所述装置包括:
第一获取模块,用于在得到用于供消费方消费的第一消息的情况下,获取所述第一消息的排序线索,所述排序线索用于确定所述第一消息在用于供所述消费方消费的多个消息中的消费顺序;
添加模块,用于在所述第一消息中添加所述排序线索;
发送模块,用于向多个代理服务器中的任意一个代理服务器发送已添加所述排序线索的第一消息,以使在所述任意一个代理服务器中缓存已添加所述排序线索的第一消息。
13.根据权利要求12所述的装置,其特征在于,所述第一获取模块包括:
确定子模块,用于确定所述多个代理服务器中是否缓存有第二消息,所述第二消息包括所述多个消息中的除所述第一消息以外的消息;
设置子模块,用于在所述多个代理服务器缓存有所述第二消息的情况下,设置所述第一消息在所述多个消息中的消费顺序的排序线索,所述排序线索用于指示所述第一消息的消费顺序位于所述第二消息的消费顺序之后。
14.根据权利要求12所述的装置,其特征在于,所述第一获取模块包括:
第一获取子模块,用于获取所述多个代理服务器中的各个代理服务器分别缓存的消息的已缓存数量;
第二获取子模块,用于根据各个已缓存数量获取所述第一消息的排序线索。
15.一种消息处理装置,其特征在于,应用于消费方,所述装置包括:
第二获取模块,用于获取多个代理服务器分别缓存的消息,所述多个代理服务器中缓存的消息用于供消费方消费;
第三获取模块,用于获取得到的多个消息中的各个消息的排序线索;各个消息的排序线索用于确定各个消息在所述多个消息中的消费顺序;
第四获取模块,用于按照各个消息的排序线索获取各个消息在所述多个消息中的消费顺序;
消费模块,用于根据各个消息在所述多个消息中的消费顺序对各个消息依次进行消费。
16.根据权利要求15所述的装置,其特征在于,
所述排序线索是根据消息被生产方向代理服务器发送之前各个代理服务器中分别缓存的消息的已缓存数量获取到的;
或者,
所述排序线索是根据在消息被生产方向任意一个代理服务器发送之前所述多个代理服务器缓存的已缓存消息设置的;
或者,
所述排序线索是根据消息在被代理服务器接收时的接收时刻获取到的。
17.根据权利要求16所述的装置,其特征在于,所述第四获取模块包括:
第一存储子模块,用于对于每一个代理服务器,将从所述代理服务器得到的消息存储在一个待排序队列中;
第三获取子模块,用于分别获取各个待排序队列中的消费顺序为首位的目标消息;
第二存储子模块,用于将各个目标消息分别存储在选举队列中;
第四获取子模块,用于获取所述选举队列中的、排序线索用于指示消费顺序为首位的候选消息;
第三存储子模块,用于将所述候选消息存储在已排序队列中;
删除子模块,用于将所述候选消息从所述候选消息所属的待排序队列中删除以及从所述候选消息所属的选举队列中删除;
第五获取子模块,用于获取所述候选消息所属的待排序队列中的消费顺序为首位的目标消息;
第四存储子模块,用于将所述候选消息所属的待排序队列中的消费顺序为首位的目标消息存储在选举队列中;
所述第四获取子模块还用于:获取所述选举队列中的、排序线索用于指示消费顺序为首位的候选消息,直至获取的消息均存储在所述已排序队列为止;
其中,存储在所述已排序队列越早的消息在已排序队列中的消息位点比存储在所述已排序队列越晚的消息在已排序队列中的消息位点靠前。
18.根据权利要求17所述的装置,其特征在于,所述第四获取子模块包括:
第一选择单元,用于根据各个代理服务器中分别缓存的消息的已缓存数量,在所述选举队列中选择最小的已缓存数量对应的消息;
确定单元,用于在最小的已缓存数量对应的消息为一个的情况下,将所述最小的已缓存数量对应的消息确定为所述候选消息;
第一获取单元,用于在最小的已缓存数量对应的消息为至少两个的情况下,获取至少两个消息分别被代理服务器接收的接收时刻,第二选择单元,用于在至少两个消息中选择最早的接收时刻对应的消息,并作为所述候选消息。
19.根据权利要求18所述的装置,其特征在于,所述第三获取子模块包括:
判断单元,用于判断所述候选消息所属的待排序队列中是否还存在消息;
拉取单元,用于在所述候选消息所属的待排序队列中不存在消息的情况下,从所述候选消息所属的待排序队列对应的代理服务器中,拉取供所述消费方消费的多个消息中的新消息;
第二获取单元,用于在所述新消息中获取消费顺序为首位的目标消息。
20.根据权利要求19所述的装置,其特征在于,所述第四获取子模块包括:
第三获取单元,用于在所述选举队列中的除所述新消息以外的消息中,获取消费顺序为首位的候选消息。
21.根据权利要求17所述的装置,其特征在于,所述第三获取子模块包括:
第三选择单元,用于对于任意一个待排序队列,在所述待排序队列中的多个消息中,选择在所述待排序队列对应的代理服务器中的消息位点为首位的消息,并作为所述目标消息。
22.根据权利要求17所述的装置,其特征在于,所述第三存储子模块包括:
存储单元,用于在已排序队列中的已存储的消息之后的消息位点存储所述候选消息。
23.一种电子设备,其特征在于,所述电子设备包括:
处理器;和
存储器,其上存储有可执行代码,当所述可执行代码被执行时,使得所述处理器执行如权利要求1-3中一个或多个所述的消息处理方法。
24.一个或多个机器可读介质,其上存储有可执行代码,当所述可执行代码被执行时,使得处理器执行如权利要求1-3中一个或多个所述的消息处理方法。
25.一种电子设备,其特征在于,所述电子设备包括:
处理器;和
存储器,其上存储有可执行代码,当所述可执行代码被执行时,使得所述处理器执行如权利要求4-11中一个或多个所述的消息处理方法。
26.一个或多个机器可读介质,其上存储有可执行代码,当所述可执行代码被执行时,使得处理器执行如权利要求4-11中一个或多个所述的消息处理方法。
CN202110205997.4A 2021-02-24 2021-02-24 一种消息处理方法及装置 Active CN113296977B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110205997.4A CN113296977B (zh) 2021-02-24 2021-02-24 一种消息处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110205997.4A CN113296977B (zh) 2021-02-24 2021-02-24 一种消息处理方法及装置

Publications (2)

Publication Number Publication Date
CN113296977A CN113296977A (zh) 2021-08-24
CN113296977B true CN113296977B (zh) 2023-04-07

Family

ID=77319099

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110205997.4A Active CN113296977B (zh) 2021-02-24 2021-02-24 一种消息处理方法及装置

Country Status (1)

Country Link
CN (1) CN113296977B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114490112B (zh) * 2021-12-20 2024-09-20 阿里巴巴(中国)有限公司 消息处理方法、设备及系统

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103856393A (zh) * 2013-07-09 2014-06-11 携程计算机技术(上海)有限公司 基于数据库的分布式消息中间件系统及其运行方法
CN106817295A (zh) * 2016-12-08 2017-06-09 努比亚技术有限公司 一种消息处理装置和方法
CN107038075A (zh) * 2015-07-14 2017-08-11 阿里巴巴集团控股有限公司 消息队列系统以及实现消息通信的方法
CN107391271A (zh) * 2017-05-17 2017-11-24 阿里巴巴集团控股有限公司 一种基于消息队列系统的延时任务触发方法和装置
CN109684099A (zh) * 2018-11-23 2019-04-26 新华三大数据技术有限公司 消息处理方法及装置
CN109995801A (zh) * 2017-12-29 2019-07-09 北京京东尚科信息技术有限公司 一种消息传输方法和装置
CN110333956A (zh) * 2019-05-23 2019-10-15 平安普惠企业管理有限公司 消息队列中消息存储方法、装置、介质及电子设备

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2516852A (en) * 2013-08-01 2015-02-11 Ibm Consuming ordered streams of messages in a message oriented middleware
CN107656825A (zh) * 2017-09-01 2018-02-02 上海艾融软件股份有限公司 消息处理方法、装置及系统
CN108270662A (zh) * 2017-12-26 2018-07-10 微梦创科网络科技(中国)有限公司 一种消息分发方法、装置及设备
CN108628688B (zh) * 2018-03-30 2022-11-18 创新先进技术有限公司 一种消息处理方法、装置及设备
CN109783258B (zh) * 2019-02-21 2021-02-23 北京奇艺世纪科技有限公司 一种消息处理方法、装置及服务器
CN111190747A (zh) * 2019-12-20 2020-05-22 北京金山云网络技术有限公司 用于消息队列的消息丢失检测方法和装置
CN111338814A (zh) * 2020-02-13 2020-06-26 北京奇艺世纪科技有限公司 消息处理方法和装置、存储介质和电子装置
CN111683140B (zh) * 2020-06-05 2024-03-19 北京百度网讯科技有限公司 用于分发消息的方法和装置
CN112069195A (zh) * 2020-09-09 2020-12-11 上海依图网络科技有限公司 基于数据库的消息传输方法、装置、电子设备及存储介质
CN112181683A (zh) * 2020-09-27 2021-01-05 中国银联股份有限公司 消息中间件的并发消费方法以及装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103856393A (zh) * 2013-07-09 2014-06-11 携程计算机技术(上海)有限公司 基于数据库的分布式消息中间件系统及其运行方法
CN107038075A (zh) * 2015-07-14 2017-08-11 阿里巴巴集团控股有限公司 消息队列系统以及实现消息通信的方法
CN106817295A (zh) * 2016-12-08 2017-06-09 努比亚技术有限公司 一种消息处理装置和方法
CN107391271A (zh) * 2017-05-17 2017-11-24 阿里巴巴集团控股有限公司 一种基于消息队列系统的延时任务触发方法和装置
CN109995801A (zh) * 2017-12-29 2019-07-09 北京京东尚科信息技术有限公司 一种消息传输方法和装置
CN109684099A (zh) * 2018-11-23 2019-04-26 新华三大数据技术有限公司 消息处理方法及装置
CN110333956A (zh) * 2019-05-23 2019-10-15 平安普惠企业管理有限公司 消息队列中消息存储方法、装置、介质及电子设备

Also Published As

Publication number Publication date
CN113296977A (zh) 2021-08-24

Similar Documents

Publication Publication Date Title
US9560165B2 (en) BT offline data download system and method, and computer storage medium
CN102857578B (zh) 一种网络硬盘的文件上传方法、系统及网盘客户端
US20180027061A1 (en) Method and apparatus for elastically scaling virtual machine cluster
CN110781373B (zh) 榜单更新方法、装置、可读介质和电子设备
CN112035405B (zh) 一种文档转码方法、装置、调度服务器和存储介质
CN111143331A (zh) 数据迁移方法、装置及计算机存储介质
CN113296977B (zh) 一种消息处理方法及装置
CN113377777B (zh) 数据加载方法、设备、计算机程序产品及存储介质
TWI602431B (zh) Method and device for transmitting information
CN110837499B (zh) 数据访问处理方法、装置、电子设备和存储介质
CN114553762A (zh) 一种对流表中的流表项处理的方法及装置
US20130018987A1 (en) Adaptive replication
CN110995817B (zh) 请求回调方法、装置及客户端设备
CN113297267A (zh) 数据缓存和任务处理方法、装置、设备以及存储介质
CN110891033B (zh) 网络资源处理方法、装置、网关、控制器及存储介质
CN113448739B (zh) 一种数据处理方法及装置
CN113377548B (zh) 一种标识生成方法、装置、计算机设备、存储介质
CN103618961A (zh) 一种显示视频标题的方法、系统及浏览器
CN113296973A (zh) 一种消息处理方法、消息读取方法、装置及可读介质
US20150236987A1 (en) Device, method and non-transitory computer readable storage medium for performing instant message communication
WO2016069951A1 (en) Method and system of content caching and transmission
CN113535606A (zh) 一种数据处理方法及装置
CN112051964B (zh) 数据处理方法及装置
CN113656645B (zh) 日志消费方法和装置
CN110881058B (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: 40057560

Country of ref document: HK

GR01 Patent grant
GR01 Patent grant