CN113326146A - 一种消息处理方法、装置、电子设备及存储介质 - Google Patents

一种消息处理方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN113326146A
CN113326146A CN202110469782.3A CN202110469782A CN113326146A CN 113326146 A CN113326146 A CN 113326146A CN 202110469782 A CN202110469782 A CN 202110469782A CN 113326146 A CN113326146 A CN 113326146A
Authority
CN
China
Prior art keywords
message
consumer
instance
partition
consumer instance
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
CN202110469782.3A
Other languages
English (en)
Inventor
李明昊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jingdong Century Trading Co Ltd
Beijing Wodong Tianjun Information Technology Co Ltd
Original Assignee
Beijing Jingdong Century Trading Co Ltd
Beijing Wodong Tianjun Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Jingdong Century Trading Co Ltd, Beijing Wodong Tianjun Information Technology Co Ltd filed Critical Beijing Jingdong Century Trading Co Ltd
Priority to CN202110469782.3A priority Critical patent/CN113326146A/zh
Publication of CN113326146A publication Critical patent/CN113326146A/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

一种消息处理方法、装置、电子设备及存储介质
技术领域
本申请涉及软件技术领域,尤其涉及一种消息处理方法、装置、电子设备及存储介质。
背景技术
通过消息中间件,不同消费者组内的消费者实例可以同时消费一个消息分区中的消息队列。然而,相关技术中,当消费者组或者消费者组内的消费者实例发生变更时,在短时间内所有消费者实例均无法进行消息消费,导致消息的大量积压或者重复消费等问题。
发明内容
有鉴于此,本申请实施例的主要目的在于提供一种消息处理方法、装置、电子设备及存储介质,以解决相关技术中消息大量积压或者重复消费的问题。
为达到上述目的,本申请实施例的技术方案是这样实现的:
本申请实施例提供了一种消息处理方法,所述方法包括:
接收第一消费者组内的第一消费者实例的消息请求;
基于第一数量和所述第一消费者实例的消息访问参数,确定第一消息分区;所述第一数量表征分配给所述第一消费者组的消息分区的数量;
从所述第一消息分区中提取对应的第一消息,并将所述第一消息返回给所述第一消费者实例。
上述方案中,在所述接收第一消费者组内的第一消费者实例的消息请求之前,所述方法还包括:
缓存所述第一消费者组对应的第一信息;其中,
所述第一信息至少表征所述第一消费者组与分配到的消息分区之间的对应关系。
上述方案中,所述基于第一数量和所述第一消费者实例的消息访问参数,确定第一消息分区,包括:
通过所述第一消费者实例的消息访问次数对所述第一数量取模;
在分配给所述第一消费者组的所有消息分区中,将对应编号与取模结果相同的消息分区确定为所述第一消息分区;
其中,所述第一消费者组分配到的所有消息分区按顺序编号。
上述方案中,所述从所述第一消息分区中提取对应的第一消息,包括:
确定所述第一消费者实例对应的第一消息位点;
根据所述第一消息位点,在所述第一消息分区里提取出所述第一消息。
上述方案中,在所述接收第一消费者组内的第一消费者实例的消息请求之前,所述方法还包括:
缓存所述第一消费者实例对应的第一消息位点;其中,
所述消息位点表征对应的消费者实例对消息分区中消息队列的消费进度。
上述方案中,所述方法还包括:
在所述第一消息被所述第一消费者实例成功接收的情况下,更新所述第一消费者实例对应的第一消息位点。
上述方案中,在所述将所述第一消息返回给所述第一消费者实例之后,所述方法还包括:
创建第一线程,并将所述第一消息保存至所述第一线程中;
在设定时长内未监听到第二消息的情况下,将所述第一线程中保存的所述第一消息发送给所述第一消费者实例;其中,
所述第二消息表征所述第一消费者实例返回的关于接收到所述第一消息的确认消息。
上述方案中,所述方法还包括:
在所述设定时长内监听到所述第二消息的情况下,从所述第一线程中删除所述第一消息。
本申请实施例还提供了一种消息处理装置,所述装置包括:
接收单元,用于接收第一消费者组内的第一消费者实例的消息请求;
确定单元,用于基于第一数量和所述第一消费者实例的消息访问参数,确定第一消息分区;所述第一数量表征分配给所述第一消费者组的消息分区的数量;
返回单元,用于从所述第一消息分区中提取对应的第一消息,并将所述第一消息返回给所述第一消费者实例。
本申请实施例还提供了一种电子设备,包括:处理器和用于存储能够在处理器上运行的计算机程序的存储器,其中,
所述处理器用于运行所述计算机程序时,执行上述任一方法的步骤。
本申请实施例还提供了一种存储介质,其上存有计算机程序,所述计算机程序被处理器执行时实现上述任一方法的步骤。
在本申请实施例中,接收第一消费者组内的第一消费者实例的消息请求;基于第一数量和所述第一消费者实例的消息访问参数,确定第一消息分区;所述第一数量表征分配给所述第一消费者组的消息分区的数量;从所述第一消息分区中提取对应的第一消息,并将所述第一消息返回给所述第一消费者实例,这样,消费者组内的一个消费者实例可以根据消息访问参数,消费所述消费者组对应的消息分区中的任意一个消息分区,消费者实例与消息分区之间没有固定的对应关系,这样,即使消费者组内的消费者实例的数量发生变化,也不会出现所有消费者实例停止消息消费的情况,从而避免了短时间内消息的大量积压或者重复消费的问题,提高了消息消费的效率。
附图说明
图1为本申请实施例提供的消息处理方法的实现流程示意图;
图2为本申请实施例提供的消费者实例拉取消息的示意图;
图3为本申请实施例提供的消费者实例分区索引的示意图;
图4为本申请实施例提供的key-value式数据库的保存情况示意图;
图5为本申请应用实施例提供的消息处理方法的流程示意图;
图6为本申请应用实施例提供的消息处理方法的另一流程示意图;
图7为本申请应用实施例提供的消息处理方法的另一流程示意图;
图8为本申请应用实施例提供的消息处理方法的另一流程示意图;
图9为本申请实施例提供的消息处理装置的示意图;
图10为本申请实施例提供的电子设备的硬件组成结构示意图。
具体实施方式
消息中间件系统具有高可靠性的特点,被广泛应用于公司的内部系统中,如订单系统、支付系统、库房系统。
在消息中间件中,一个消费者组可以订阅多个主题,每个主题对应多个消息分区,不同的消费者组内的消费者实例可以同时消费一个消息分区里的消息,被消费过的消息不会从消息队列中删除,只会更新消费者实例的消息位点。然而,一个消费者组内的每个消费者实例只会消费部分消息分区中的消息,每个消息分区只能由同一个消费者组内的一个消费者实例进行消费,也就是说,消费者实例与消息分区之间存在一个特定的对应关系。
当消费者组内加入新的消费者实例,或有消费者实例离开该消费者组,或消费者实例宕机时,会出现重平衡(Rebalance)。重平衡表征重新分配消费者组内每个消费者实例和消息分区之间的对应关系。
在出现重平衡时,所有的消费者实例会停止消费,只有在重平衡结束之后才会继续进行消费。而在消费者实例停止消费时,短时间内消息会大量积压,容易影响消息中间件系统的性能。并且,消费者实例与消息分区之间建立的通信连接会被打断,如果消费者实例需要继续进行消费的话,需要在重平衡结束之后重新建立与消息分区之间的通信连接,由此造成很大的性能开销。此外,消息位点由消费者实例异步提交,在提交过程中如果出现重平衡,容易造成在消息位点提交成功前发生重复消费的问题。
也就是说,重平衡的出现会造成短时间内消息的大量积压以及消息被重复消费等问题。
基于此,本申请实施例提供了一种消息处理方法、装置、电子设备及存储介质,接收第一消费者组内的第一消费者实例的消息请求;基于第一数量和所述第一消费者实例的消息访问参数,确定第一消息分区;所述第一数量表征分配给所述第一消费者组的消息分区的数量;从所述第一消息分区中提取对应的第一消息,并将所述第一消息返回给所述第一消费者实例,这样,消费者组内的一个消费者实例可以根据消息访问参数,消费所述消费者组对应的消息分区中的任意一个消息分区,消费者实例与消息分区之间没有固定的对应关系,这样,即使消费者组内的消费者实例的数量发生变化,也不会出现所有消费者实例停止消息消费的情况,从而避免了短时间内消息的大量积压或者重复消费的问题,提高了消息消费的效率。
下面结合附图及实施例对本申请再作进一步详细的描述。
图1为本申请实施例提供的消息处理方法的实现流程示意图,所述方法应用于消息服务器。如图1所示,所述方法包括:
步骤101:接收第一消费者组内的第一消费者实例的消息请求。
这里,接收第一消费者组内的第一消费者实例的消息请求,所述消息请求用于请求消费消息分区的消息队列中的一条消息。
步骤102:基于第一数量和所述第一消费者实例的消息访问参数,确定第一消息分区;所述第一数量表征分配给所述第一消费者组的消息分区的数量。
这里,分配给第一消费者组的消息分区为至少一个,所以,第一数量大于或等于一。第一消费者实例的消息访问参数至少包括所述第一消费者实例当前的访问次数,所述访问次数表征所述第一消费者实例从消息服务器拉取消息的次数。基于第一数量和第一消费者实例的消息访问参数,确定第一消费者实例进行消费的消息分区。
图2为本申请实施例提供的消费者实例拉取消息的示意图,如图2所示:
步骤1中,客户端中的消费者实例从消息服务器中拉取消息,实际应用中,消费者实例每次拉取一条消息,消息服务器会将访问次数加一,当消费者实例拉取的消息的次数达到一定数量时,消息服务器确定出此时消费者实例的访问次数,使得消费者实例基于该访问次数进行消息的消费。
在消费者实例获取当前的访问次数之后,消费者实例会发送一条确认消息至消息服务器,确认已经成功获取当前的访问次数。
步骤103:从所述第一消息分区中提取对应的第一消息,并将所述第一消息返回给所述第一消费者实例。
这里,确定第一消费者实例进行消费的消息分区为第一消息分区之后,在第一消息分区中拉取所述消息请求对应的第一消息,并将所述第一消息返回给第一消费者实例。
在一实施例中,在所述接收第一消费者组内的第一消费者实例的消息请求之前,所述方法还包括:
缓存所述第一消费者组对应的第一信息;其中,
所述第一信息至少表征所述第一消费者组与分配到的消息分区之间的对应关系。
这里,在接收第一消费者实例的消息请求之前,先缓存所述第一消费者组对应的第一信息,即缓存第一消费者组与分配到的消息分区之间的对应关系。示例性地,第一消费者组分配到的消息分区有4个,则缓存第一消费者组与这4个消息分区之间的对应关系。
实际应用中,消息具有各种主题,主题表征消息的识别类型,一个主题代表一种主题类型,主题是唯一的。一个主题对应多个消息分区,因此,在一实施例中,还包括:缓存第一消费者组对应的第二信息。其中,所述第二信息表征第一消费者组与分配到的消息分区属于的主题的对应关系。
通过预先缓存第一消费者组与分配到的消息分区之间的对应关系,便于在接收到第一消费者实例的消息请求时,从第一消费者组对应的消息分区之中快速选择合适的消息分区进行消费,提高了消费效率。
在一实施例中,所述基于第一数量和所述第一消费者实例的消息访问参数,确定第一消息分区,包括:
通过所述第一消费者实例的消息访问次数对所述第一数量取模;
在分配给所述第一消费者组的所有消息分区中,将对应编号与取模结果相同的消息分区确定为所述第一消息分区;
其中,所述第一消费者组分配到的所有消息分区按顺序编号。
这里,第一消费者组分配到的所有消息分区按顺序进行编号。如第一消费者组分配到4个消息分区时,将这4个消息分区按顺序编号为消息分区1、消息分区2、消息分区3、消息分区4。
通过第一消费者实例的消息访问次数对第一消费者组分配到的消息分区的总个数进行取模,从分配给第一消费者组的所有消息分区中,选择对应编号与所述取模结果相同的消息分区作为第一消息分区。示例性地,第一消费者实例的消息访问次数为5,在第一消费者组分配到的消息分区的个数为4的情况下,通过消息访问次数对第一数量取模,得到的取模结果为1,因此,将第一消费者组分配到的消息分区中,选择编号为1的消息分区也就是消息分区1作为第一消费者实例对应的第一消息分区。
图3为本申请实施例提供的消费者实例分区索引的示意图,如图3所示:
一个消费者组内包括消费者实例Consumer A和消费者实例Consumer B两个消费者实例,该消费者组分配到的消息分区为Partition 1-4。
在存在重平衡的情况下,消费者实例Consumer A、Consumer B与消息分区Partition之间存在特定的对应关系,Consumer A对应Partition 1与Partition 2,Consumer B对应Partition 3与Partition 4。在进行消息消费时,Consumer A只会选择Partition 1与Partition 2中的其中一个进行消费,Consumer B只会选择Partition 3与Partition 4中的其中一个进行消费。
在不存在重平衡的情况下,根据消费者实例消息访问次数的不同,消费者实例可以消费该消费者组分配到的消息分区里面的任意一个消息分区。根据消息访问次数的不同,Consumer A可以选择Partition 1-4中的任意一个Partition进行消息消费。ConsumerB也可以选择Partition 1-4中的任意一个Partition进行消息消费。
实际应用中,也可以通过其他负载均衡算法,对第一消费者实例在第一数量的消息分区中进行消息分区的索引。
通过根据消息访问次数与第一数量的取模结果,确定第一消息分区,可以根据第一消费者实例消息访问次数的不同,灵活选择消息分区进行消息消费,避免了消费者实例和消息分区之间存在固定的对应关系,从而避免了重平衡的出现。
在一实施例中,所述从所述第一消息分区中提取对应的第一消息,包括:
确定所述第一消费者实例对应的第一消息位点;
根据所述第一消息位点,在所述第一消息分区里提取出所述第一消息。
这里,在从第一消息分区中提取对应的第一消息时,需要先确定第一消费者实例对应的第一消息位点,所述第一消息位点表征第一消费者实例当前在消息分区的消息队列中消费进度。示例性地,在第一消息位点为4的情况下,表征第一消费者实例在消息分区的消息队列中消费到了标号为4的消息。
根据第一消息位点,将第一消息分区里对应位点的消息提取出来作为第一消息。示例性地,在第一消费位点为4的情况下,从第一消息分区中的消息队列中,将位点为4的消息提取出来作为第一消息。
通过根据第一消费者实例对应的第一消息位点,在第一消息分区中提取出对应的第一消息,可以根据第一消费者实例当前的消费进度准确提取出对应的消息,提高了消息消费的准确性。
在一实施例中,在所述接收第一消费者组内的第一消费者实例的消息请求之前,所述方法还包括:
缓存所述第一消费者实例对应的第一消息位点;其中,
所述消息位点表征对应的消费者实例对消息分区中消息队列的消费进度。
这里,预先缓存所述第一消费者实例对应的第一消费位点,消费位点表征应的消费者实例对消息分区中消息队列的消费进度。
在去重平衡之前,由消费者实例保存并管理自身对应的消息位点,在本申请实施例中,将一个消费者组内所有消费者实例的消息位点保存至消息服务器中,由消息服务器存储并管理消费者实例对应的消息位点,并且由消息服务器将所述存储的消费者实例对应的消息位点异步提交至磁盘中,进行持久化处理。
实际应用中,可以使用键值(key-value)式数据库对所述消费者实例对应的消息位点进行存储,将一个消费者组内的所有消费者实例对应的消息位点存储起来,并将所述消息位点与消费者组的标识ID绑定起来。在key-value式数据库中,key包括至少三部分内容:消费者组ID、主题、消息分区的编号,value部分可以包括消费者实例对应的消息位点。
图4为本申请实施例提供的key-value式数据库的保存情况示意图,如图4所示:
key部分可以包括消息中间件的格式版本、消费者组的组名、主题、消费者组分配到的消息分区的编号。
value部分可以包括消息中间件的格式版本、消费者组内的所有消费者实例对应的消息位点、消费者实例对应的消息位点的副本leader epoch值、自定义元数据、时间戳。
通过预先保存消费者实例对应的消息位点,可以在接收到消费者实例的消息请求时,快速提取对应的消息返回给消费者实例,提高了消息消费的效率。
在一实施例中,所述方法还包括:
在所述第一消息被所述第一消费者实例成功接收的情况下,更新所述第一消费者实例对应的第一消息位点。
这里,在第一消息被第一消费者实例成功接收的情况下,表明第一消费者实例已经成功获取到所需的消息,此次消息请求已经结束,因此,需要更新第一消费者的消费进度,因此,更新所述第一消费者实例对应的第一消息位点。
通过在消费者实例成功消费之后更新对应的消息位点,可以确保消费者实例后续能够基于正确的消息位点进行准确消费。
在一实施例中,在所述将所述第一消息返回给所述第一消费者实例之后,所述方法还包括:
创建第一线程,并将所述第一消息保存至所述第一线程中;
在设定时长内未监听到第二消息的情况下,将所述第一线程中保存的所述第一消息发送给所述第一消费者实例;其中,
所述第二消息表征所述第一消费者实例返回的关于接收到所述第一消息的确认消息。
这里,在将第一消息返回给第一消费者实例之后,创建第一线程,将所述第一消息保存至第一线程中。如果在设定时长内未监听到第一消费者实例返回的关于接收的第一消息的确认消息,表明所述第一消息没有被第一消费者实例成功接收,在这种情况下,将第一线程中保存的第一消息发送给所述第一消费者实例。实际应用中,可以创建重试队列,将第一线程中保存的第一消息发送至所述重试队列,使所述重试队列将第一消息发送给第一消费者实例。
通过创建第一线程,在第一消息没有被成功接收到情况下,重新发送第一消息,可以通过重试机制提高第一消息被接收的成功率,提高了消费效率。
在一实施例中,所述方法还包括:
在所述设定时长内监听到所述第二消息的情况下,从所述第一线程中删除所述第一消息。
这里,如果在设定时长内监听到第一消费者实例发送的关于成功接收第一消息的确认消息的情况下,表明所述第一消息已经被成功接收,因此不需要再重传所述第一消息至第一消费者实例,因此,为了节约第一线程的内存空间,从第一线程中删除第一消息。
通过在监听到第二消息的情况下,从第一线程中删除第一消息,可以节约存储空间。
在一实施例中,所述方法还可以包括:通过第一消息中间件保存第一消费者组与分配到的消息分区之间的对应关系,由消息服务器计算第一消费者实例的消息请求对应的消息。这里,将消息服务器的存储与计算分开,消息服务器只执行计算功能,第一消息中间件执行存储功能,这样,在消息服务器中不存在消费者实例与消息分区之间的对应关系,也能避免重平衡的出现。实际应用中,所述第一消息中间件可以是Pulsar。
图5为本申请应用实施例提供的消息处理方法的流程示意图,如图5所示:
消费者实例从消息服务器的请求队列中拉取请求,消息服务器在缓存的消息位点中找到该消费者实例对应的消息位点,基于找到的消息位点从消息分区中提取对应的消息,将提取的消息返回给消费者实例之后,在缓存的消息位点中提交消息位点更新。创建一个重试线程,将提取的消息发送至重试线程,重试线程监听到消费者实例返回的确认消息之后,删除保存的提取出的消息。重试线程如果没有监听到消费者实例返回的确认消息,将之前存储的提取出的消息放入重试队列,进入重试逻辑。
图6为本申请应用实施例提供的消息处理方法的另一流程示意图,如图6所示:
消费者实例向请求队列发起请求,请求队列从处理线程中拉取请求,处理线程接收到消息请求后,在缓存的消息位点中查询消费者实例对应的消息位点,并在该消费者实例所属的消费者组对应的消息分区中选择一个消息分区,在该消息分区中查询到对应的消息之后,将该消息返回给处理线程。处理线程接收到返回的消息之后,在缓存的消息位点中更新该消费者实例对应的消息位点。之后由处理线程将该消息返回给消费者实例。新增一个重试线程,重试线程在设定时长内没有监听到消费者实例返回的确认消息,则将返回给消费者实例的消息发送至重试队列,由重试队列进行重新发送。
图7为本申请应用实施例提供的消息处理方法的另一流程示意图,如图7所示:
处理线程开始执行后,检测是否有请求消息消费的消息请求,在存在消息请求的情况下,创建消息集合,根据该消息请求找到对应的消息并新增重试线程,更新消费者实例对应的消息位点,将找到的消息返回给消费者实例。
图8为本申请应用实施例提供的消息处理方法的另一流程示意图,如图8所示:
当消息服务器同时接收到多个消费者实例的消息请求时,处理线程创建一个请求队列,在该请求队列的列尾进行消费者实例之间的资源协调。在本申请实施例中,使用自旋锁(CAS,CompareAndSet)方法对访问消息服务器的消费者实例进行排序。CAS方法可以实现无锁编程,当多个消费者实例同时使用CAS方法插入请求队列的队尾时,只有一个消费者实例会成功插入,其余消费者实例均会失败。因为CAS方法对应3个操作数,内存值V、旧的预期值A、需要修改的新的预期值B,将旧的预期值A与内存值V进行比较,如果两者相等,说明旧的预期值未被修改过,此时,将新的预期值B赋值给内存值V。
需要说明是,消息服务器在接收到消费者实例的消息请求时,相关线程对该消息请求执行必要的检查之后,将该消息请求放入请求队列中。从接收消息请求到将消息请求放入请求队列中,这个执行过程所需的时间是非常短的,所以,即使消息服务器处理海量的消息请求,也不会过多地占用线程。
需要说明的是,在去重平衡之前,消费者实例消费成功后需要向消息服务器提交自身对应的消息位点,消费者实例一般同步提交消息位点,然而,同步提交消息位点时,消费者实例程序会处于阻塞状态,阻塞状态会持续到消息服务器返回提交结果。在任何系统中,因为程序而非资源限制而导致的阻塞会大大降低系统的性能,也会影响到整个系统的系统吞吐量TPS。如果消费者实例异步提交自身对应的消息位点,在提交消息位点失败的情况下,如果自动重试提交消息位点,则重试时提交的消息位点可能已经过期或者不是当前的最新的消息位点了,所以异步提交的情况下重试提交是没有意义的,所以异步提交不会进行自动重试提交。而在本申请实施例中,消费者实例在消费成功后不需要提交自身对应的消息位点,因为对应的消息位点由消息服务器负责存储并提交更新。消费者实例在消费成功后只需异步提交关于成功消费的消息的确认消息给消息服务器。消息服务器中针对返回给消费者实例的消息创建了一个重试判断逻辑,如果收到了消费者实例的确认消息,则将重试线程中保存的消息删除,如果没有收到消费者实例的确认消息,则将重试线程中保存的消息发送给重试队列,由重试队列执行重试逻辑。从而避免了消费者实例异步提交消息位点时无法进行自动重试的问题。
在本申请实施例中,接收第一消费者组内的第一消费者实例的消息请求;基于第一数量和所述第一消费者实例的消息访问参数,确定第一消息分区;所述第一数量表征分配给所述第一消费者组的消息分区的数量;从所述第一消息分区中提取对应的第一消息,并将所述第一消息返回给所述第一消费者实例,这样,消费者组内的一个消费者实例可以根据消息访问参数,消费所述消费者组对应的消息分区中的任意一个消息分区,消费者实例与消息分区之间没有固定的对应关系,这样,即使消费者组内的消费者实例的数量发生变化,也不会出现所有消费者实例停止消息消费的情况,从而避免了短时间内消息的大量积压或者重复消费的问题,提高了消息消费的效率。
为实现本申请实施例的方法,本申请实施例还提供了一种消息处理装置,图9为本申请实施例提供的消息处理装置的示意图,请参见图9,该装置包括:
接收单元901,用于接收第一消费者组内的第一消费者实例的消息请求;
确定单元902,用于基于第一数量和所述第一消费者实例的消息访问参数,确定第一消息分区;所述第一数量表征分配给所述第一消费者组的消息分区的数量;
返回单元903,用于从所述第一消息分区中提取对应的第一消息,并将所述第一消息返回给所述第一消费者实例。
在一实施例中,所述装置还包括:第一缓存单元,用于缓存所述第一消费者组对应的第一信息;其中,
所述第一信息至少表征所述第一消费者组与分配到的消息分区之间的对应关系。
在一实施例中,所述确定单元902,还用于通过所述第一消费者实例的消息访问次数对所述第一数量取模;
在分配给所述第一消费者组的所有消息分区中,将对应编号与取模结果相同的消息分区确定为所述第一消息分区;
其中,所述第一消费者组分配到的所有消息分区按顺序编号。
在一实施例中,所述返回单元903,还用于确定所述第一消费者实例对应的第一消息位点;
根据所述第一消息位点,在所述第一消息分区里提取出所述第一消息。
在一实施例中,所述装置还包括:第二缓存单元,用于缓存所述第一消费者实例对应的第一消息位点;其中,
所述消息位点表征对应的消费者实例对消息分区中消息队列的消费进度。
在一实施例中,所述装置还包括:更新单元,用于在所述第一消息被所述第一消费者实例成功接收的情况下,更新所述第一消费者实例对应的第一消息位点。
在一实施例中,所述装置还包括:创建单元,用于创建第一线程,并将所述第一消息保存至所述第一线程中;
在设定时长内未监听到第二消息的情况下,将所述第一线程中保存的所述第一消息发送给所述第一消费者实例;其中,
所述第二消息表征所述第一消费者实例返回的关于接收到所述第一消息的确认消息。
在一实施例中,所述装置还包括:删除单元,用于在所述设定时长内监听到所述第二消息的情况下,从所述第一线程中删除所述第一消息。
实际应用时,所述接收单元901、所述确定单元902、所述返回单元903、所述第一缓存单元、所述第二缓存单元、所述更新单元、所述创建单元、所述删除单元可通过终端中的处理器,比如中央处理器(CPU,Central Processing Unit)、数字信号处理器(DSP,DigitalSignal Processor)、微控制单元(MCU,Microcontroller Unit)或可编程门阵列(FPGA,Field-Programmable Gate Array)等实现。
需要说明的是:上述实施例提供的消息处理装置在进行信息显示时,仅以上述各程序模块的划分进行举例说明,实际应用中,可以根据需要而将上述处理分配由不同的程序模块完成,即将装置的内部结构划分成不同的程序模块,以完成以上描述的全部或者部分处理。另外,上述实施例提供的消息处理装置与消息处理方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
基于上述程序模块的硬件实现,且为了实现本申请实施例的方法,本申请实施例还提供了一种电子设备。图10为本申请实施例提供的电子设备的硬件组成结构示意图,如图10所示,电子设备包括:
通信接口1001,能够与其它设备比如网络设备等进行信息交互;
处理器1002,与所述通信接口1001连接,以实现与其它设备进行信息交互,用于运行计算机程序时,执行上述终端侧一个或多个技术方案提供的方法。而所述计算机程序存储在存储器1003上。
具体地,所述处理器1002,用于接收第一消费者组内的第一消费者实例的消息请求;基于第一数量和所述第一消费者实例的消息访问参数,确定第一消息分区;所述第一数量表征分配给所述第一消费者组的消息分区的数量;从所述第一消息分区中提取对应的第一消息,并将所述第一消息返回给所述第一消费者实例。
在一实施例中,在所述接收第一消费者组内的第一消费者实例的消息请求之前,所述处理器1002还用于缓存所述第一消费者组对应的第一信息;其中,
所述第一信息至少表征所述第一消费者组与分配到的消息分区之间的对应关系。
在一实施例中,所述处理器1002还用于通过所述第一消费者实例的消息访问次数对所述第一数量取模;
在分配给所述第一消费者组的所有消息分区中,将对应编号与取模结果相同的消息分区确定为所述第一消息分区;
其中,所述第一消费者组分配到的所有消息分区按顺序编号。
在一实施例中,所述处理器1002还用于确定所述第一消费者实例对应的第一消息位点;
根据所述第一消息位点,在所述第一消息分区里提取出所述第一消息。
在一实施例中,在所述接收第一消费者组内的第一消费者实例的消息请求之前,所述处理器1002还用于缓存所述第一消费者实例对应的第一消息位点;其中,
所述消息位点表征对应的消费者实例对消息分区中消息队列的消费进度。
在一实施例中,所述处理器1002还用于在所述第一消息被所述第一消费者实例成功接收的情况下,更新所述第一消费者实例对应的第一消息位点。
在一实施例中,在所述将所述第一消息返回给所述第一消费者实例之后,所述处理器1002还用于创建第一线程,并将所述第一消息保存至所述第一线程中;
在设定时长内未监听到第二消息的情况下,将所述第一线程中保存的所述第一消息发送给所述第一消费者实例;其中,
所述第二消息表征所述第一消费者实例返回的关于接收到所述第一消息的确认消息。
在一实施例中,所述处理器1002还用于在所述设定时长内监听到所述第二消息的情况下,从所述第一线程中删除所述第一消息。
当然,实际应用时,电子设备中的各个组件通过总线系统1004耦合在一起。可理解,总线系统1004用于实现这些组件之间的连接通信。总线系统1004除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图10中将各种总线都标为总线系统1004。
本申请实施例中的存储器1003用于存储各种类型的数据以支持电子设备的操作。这些数据的示例包括:用于在电子设备上操作的任何计算机程序。
可以理解,存储器1003可以是易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(ROM,Read OnlyMemory)、可编程只读存储器(PROM,Programmable Read-Only Memory)、可擦除可编程只读存储器(EPROM,Erasable Programmable Read-Only Memory)、电可擦除可编程只读存储器(EEPROM,Electrically Erasable Programmable Read-Only Memory)、磁性随机存取存储器(FRAM,ferromagnetic random access memory)、快闪存储器(Flash Memory)、磁表面存储器、光盘、或只读光盘(CD-ROM,Compact Disc Read-Only Memory);磁表面存储器可以是磁盘存储器或磁带存储器。易失性存储器可以是随机存取存储器(RAM,Random AccessMemory),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(SRAM,Static Random Access Memory)、同步静态随机存取存储器(SSRAM,Synchronous Static Random Access Memory)、动态随机存取存储器(DRAM,Dynamic Random Access Memory)、同步动态随机存取存储器(SDRAM,SynchronousDynamic Random Access Memory)、双倍数据速率同步动态随机存取存储器(DDRSDRAM,Double Data Rate Synchronous Dynamic Random Access Memory)、增强型同步动态随机存取存储器(ESDRAM,Enhanced Synchronous Dynamic Random Access Memory)、同步连接动态随机存取存储器(SLDRAM,SyncLink Dynamic Random Access Memory)、直接内存总线随机存取存储器(DRRAM,Direct Rambus Random Access Memory)。本申请实施例描述的存储器1003旨在包括但不限于这些和任意其它适合类型的存储器。
上述本申请实施例揭示的方法可以应用于处理器1002中,或者由处理器1002实现。处理器1002可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器1002中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器1002可以是通用处理器、DSP,或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器1002可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的方法的步骤,可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于存储介质中,该存储介质位于存储器1003,处理器1002读取存储器1003中的程序,结合其硬件完成前述方法的步骤。
处理器1002执行所述程序时实现本申请实施例的各个方法中的相应流程。
在示例性实施例中,本申请实施例还提供了一种存储介质,即计算机存储介质,具体为计算机可读存储介质,例如包括存储计算机程序的存储器1003,上述计算机程序可由处理器1002执行,以完成前述方法所述步骤。计算机可读存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、Flash Memory、磁表面存储器、光盘、或CD-ROM等存储器。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置、终端和方法,可以通过其它的方式实现。以上所描述的设备实施例仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台电子设备(可以是个人计算机、服务器、或者网络设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (11)

1.一种消息处理方法,其特征在于,应用于消息服务器,所述方法包括:
接收第一消费者组内的第一消费者实例的消息请求;
基于第一数量和所述第一消费者实例的消息访问参数,确定第一消息分区;所述第一数量表征分配给所述第一消费者组的消息分区的数量;
从所述第一消息分区中提取对应的第一消息,并将所述第一消息返回给所述第一消费者实例。
2.根据权利要求1所述的消息处理方法,其特征在于,在所述接收第一消费者组内的第一消费者实例的消息请求之前,所述方法还包括:
缓存所述第一消费者组对应的第一信息;其中,
所述第一信息至少表征所述第一消费者组与分配到的消息分区之间的对应关系。
3.根据权利要求1所述的消息处理方法,其特征在于,所述基于第一数量和所述第一消费者实例的消息访问参数,确定第一消息分区,包括:
通过所述第一消费者实例的消息访问次数对所述第一数量取模;
在分配给所述第一消费者组的所有消息分区中,将对应编号与取模结果相同的消息分区确定为所述第一消息分区;
其中,所述第一消费者组分配到的所有消息分区按顺序编号。
4.根据权利要求1所述的消息处理方法,其特征在于,所述从所述第一消息分区中提取对应的第一消息,包括:
确定所述第一消费者实例对应的第一消息位点;
根据所述第一消息位点,在所述第一消息分区里提取出所述第一消息。
5.根据权利要求4所述的消息处理方法,其特征在于,在所述接收第一消费者组内的第一消费者实例的消息请求之前,所述方法还包括:
缓存所述第一消费者实例对应的第一消息位点;其中,
所述消息位点表征对应的消费者实例对消息分区中消息队列的消费进度。
6.根据权利要求5所述的消息处理方法,其特征在于,所述方法还包括:
在所述第一消息被所述第一消费者实例成功接收的情况下,更新所述第一消费者实例对应的第一消息位点。
7.根据权利要求1所述的消息处理方法,其特征在于,在所述将所述第一消息返回给所述第一消费者实例之后,所述方法还包括:
创建第一线程,并将所述第一消息保存至所述第一线程中;
在设定时长内未监听到第二消息的情况下,将所述第一线程中保存的所述第一消息发送给所述第一消费者实例;其中,
所述第二消息表征所述第一消费者实例返回的关于接收到所述第一消息的确认消息。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
在所述设定时长内监听到所述第二消息的情况下,从所述第一线程中删除所述第一消息。
9.一种消息处理装置,其特征在于,所述装置包括:
接收单元,用于接收第一消费者组内的第一消费者实例的消息请求;
确定单元,用于基于第一数量和所述第一消费者实例的消息访问参数,确定第一消息分区;所述第一数量表征分配给所述第一消费者组的消息分区的数量;
返回单元,用于从所述第一消息分区中提取对应的第一消息,并将所述第一消息返回给所述第一消费者实例。
10.一种电子设备,其特征在于,包括:处理器和用于存储能够在处理器上运行的计算机程序的存储器,其中,
所述处理器用于运行所述计算机程序时,执行权利要求1-8任一项所述方法的步骤。
11.一种存储介质,其上存有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-8任一项所述方法的步骤。
CN202110469782.3A 2021-04-28 2021-04-28 一种消息处理方法、装置、电子设备及存储介质 Pending CN113326146A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110469782.3A CN113326146A (zh) 2021-04-28 2021-04-28 一种消息处理方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110469782.3A CN113326146A (zh) 2021-04-28 2021-04-28 一种消息处理方法、装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN113326146A true CN113326146A (zh) 2021-08-31

Family

ID=77413943

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110469782.3A Pending CN113326146A (zh) 2021-04-28 2021-04-28 一种消息处理方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN113326146A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114296910A (zh) * 2021-12-02 2022-04-08 武汉物易云通网络科技有限公司 一种多分区队列顺序消费方法和装置
CN114584625A (zh) * 2022-01-24 2022-06-03 北京达佳互联信息技术有限公司 一种消息处理方法、装置、电子设备及存储介质

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114296910A (zh) * 2021-12-02 2022-04-08 武汉物易云通网络科技有限公司 一种多分区队列顺序消费方法和装置
CN114296910B (zh) * 2021-12-02 2022-11-22 武汉物易云通网络科技有限公司 一种多分区队列顺序消费方法和装置
CN114584625A (zh) * 2022-01-24 2022-06-03 北京达佳互联信息技术有限公司 一种消息处理方法、装置、电子设备及存储介质
CN114584625B (zh) * 2022-01-24 2024-03-26 北京达佳互联信息技术有限公司 一种消息处理方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
CN109947668B (zh) 存储数据的方法和装置
US5627961A (en) Distributed data processing system
CN108055343B (zh) 用于机房的数据同步方法及装置
WO2020181810A1 (zh) 应用于集群内多级缓存的数据处理方法和装置
EP1834261B1 (en) Systems, methods, and software for distributed loading of databases
CN107451853B (zh) 一种红包实时派发的方法、装置、系统及存储介质
CN102780603B (zh) 网站流量控制方法及装置
CN110753084B (zh) 上链数据读取方法、缓存服务器及计算机可读存储介质
CN113326146A (zh) 一种消息处理方法、装置、电子设备及存储介质
US9514170B1 (en) Priority queue using two differently-indexed single-index tables
CN109561151B (zh) 数据存储方法、装置、服务器和存储介质
CN112579692B (zh) 一种数据同步方法、装置、系统、设备及存储介质
CN113094430B (zh) 一种数据处理方法、装置、设备以及存储介质
CN111427859A (zh) 一种消息处理方法、装置、电子设备及存储介质
CN112433921A (zh) 用于动态埋点的方法及设备
CN113946427A (zh) 用于多操作系统的任务处理方法、处理器及存储介质
CN112860746B (zh) 一种基于缓存削减的方法、设备及系统
CN108475211B (zh) 无状态系统和用于获得资源的系统
US11243979B1 (en) Asynchronous propagation of database events
CN114500416A (zh) 用于最多一次消息投递的投递方法和投递系统
CN111399753B (zh) 写入图片的方法和装置
CN112711606A (zh) 数据库访问方法、装置、计算机设备和存储介质
CN113760940A (zh) 应用于分布式系统的配额管理方法、装置、设备及介质
CN112699116A (zh) 一种数据处理方法和系统
CN113792074B (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