CN112395097A - 一种消息处理方法、装置、设备和存储介质 - Google Patents

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

Info

Publication number
CN112395097A
CN112395097A CN201910749233.4A CN201910749233A CN112395097A CN 112395097 A CN112395097 A CN 112395097A CN 201910749233 A CN201910749233 A CN 201910749233A CN 112395097 A CN112395097 A CN 112395097A
Authority
CN
China
Prior art keywords
message
preset
message queue
thread pool
processing
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
CN201910749233.4A
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 Jingdong Shangke Information Technology Co Ltd
Original Assignee
Beijing Jingdong Century Trading Co Ltd
Beijing Jingdong Shangke 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 Jingdong Shangke Information Technology Co Ltd filed Critical Beijing Jingdong Century Trading Co Ltd
Priority to CN201910749233.4A priority Critical patent/CN112395097A/zh
Publication of CN112395097A publication Critical patent/CN112395097A/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
    • 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)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明实施例公开了一种消息处理方法、装置、设备和存储介质,该方法包括:从消息队列集群中周期性地获取预设数量的消息;根据预设处理方式,将当前周期获取的消息放入预设线程池中进行并发处理;若出现消息处理失败情况,则将处理失败的消息重新放入消息队列集群中,以更新消息队列集群。通过本发明实施例的技术方案,可以对消息获取和处理进行解耦,从而解决因处理长时消息慢而导致消息队列积压的问题,提高消息处理效率。

Description

一种消息处理方法、装置、设备和存储介质
技术领域
本发明实施例涉及计算机技术,尤其涉及一种消息处理方法、装置、设备和存储介质。
背景技术
目前,往往利用生产者-消费者模式对消息进行处理,其中生产者可以是指产生消息数据的模块,消费者可以是指处理消息数据的模块。生产者-消费者模式可以为通过一个缓存区来解决生产者与消费者之间的强耦合问题。即生产者和消费者彼此之间并不直接通讯,而是通过缓存区中的消息队列(Message Queue,MQ)进行通讯,使得生产者生产完数据之后不用等待相应的消费者处理,而是直接放入消息队列中,从而消费者无需找生产者要数据,只需直接从消息队列中提取,平衡了生产者和消费者的处理能力。
然而,在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
由于在生产者-消费者模式中,消费者在处理消息过程和获取消息过程是同步的,即处理完一个消息后,才能从消息队列中获取另一个消息,从而当某个消息处理时间较长(即为长时消息)时,会阻塞其他消息的获取,同时也降低了消息处理效率,即降低了每秒事务处理量(Transaction Per Second,TPS),影响了系统性能。
发明内容
本发明实施例提供了一种消息处理方法、装置、设备和存储介质,以对消息获取和处理进行解耦,从而解决因处理长时消息慢而导致消息队列积压的问题,提高消息处理效率。
第一方面,本发明实施例提供了一种消息处理方法,包括:
从消息队列集群中周期性地获取预设数量的消息;
根据预设处理方式,将当前周期获取的所述消息放入预设线程池中进行并发处理;
若出现消息处理失败情况,则将处理失败的消息重新放入所述消息队列集群中,以更新所述消息队列集群。
第二方面,本发明实施例还提供了一种消息处理装置,包括:
消息获取模块,用于从消息队列集群中周期性地获取预设数量的消息;
消息处理模块,用于根据预设处理方式,将当前周期获取的所述消息放入预设线程池中进行并发处理;
消息队列集群更新模块,用于若出现消息处理失败情况,则将处理失败的消息重新放入所述消息队列集群中,以更新所述消息队列集群。
第三方面,本发明实施例还提供了一种设备,所述设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明任意实施例所提供的消息处理方法步骤。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任意实施例所提供的消息处理方法步骤。
上述发明中的实施例具有如下优点或有益效果:
通过在消息处理模块(即消费者)本地中设置一个预设线程池,从而可以将从消息队列集群中获取的预设数量的消息放入预设线程池中,便可以继续周期性地获取消息,无需等待消息处理结束,从而对消息获取和消息处理进行了解耦,同时解决了因处理长时消息慢而导致消息队列积压的问题,并且利用预设线程池可以对多个消息进行并发处理,提高了消息处理效率。
附图说明
图1是本发明实施例一提供的一种消息处理方法的流程图;
图2是本发明实施例二提供的一种消息处理方法的流程图;
图3是本发明实施例三提供的一种消息处理装置的结构示意图;
图4是本发明实施例四提供的一种设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1为本发明实施例一提供的一种消息处理方法的流程图,本实施例可适用于对消息队列中的消息进行处理的情况。该方法可以由消息处理装置来执行,该装置可以由软件和/或硬件的方式来实现,集成于具有消息处理能力的设备中。该方法具体包括以下步骤:
S110、从消息队列集群中周期性地获取预设数量的消息。
其中,消息队列可以是指在消息传输过程中保存消息的容器。消息队列可以包括一个或多个消息。消息队列集群可以是由多个消息队列组成。本实施例中的消息队列集群可以由一个消息队列控制模块基于自身MQ系统对消息队列集群进行管理和控制。示例性地,MQ系统可以是但不限于ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ和RocketMQ。预设数量可以是指每个周期获取的消息数量。本实施例中的预设数量可以为一个或多个,其可以基于MQ系统的配置信息进行设置,比如,若MQ系统可配置,则可以基于业务需求设置相应的预设数量;若MQ系统不可配置,则可以将MQ系统中的默认消息获取数量设置为预设数量。
具体地,消息产生模块(即生产者)在产生消息后,可以将消息发送至消息队列控制模块中,消息队列控制模块基于自身MQ系统的控制,将接收的消息存储至消息队列集群中的相应消息队列中。当某个消息处理模块(即消费者)从消息队列集群中获取消息时,消息队列控制模块可以将消息队列集群中,与该消息处理模块绑定的消息队列中取出预设数量的消息,并将取出的消息发送至该消息处理模块中,以使消息处理模块可以获得预设数量的消息。本实施例中的消息处理模块可以按照预设时间间隔,周期性地从消息队列集群中拉取预设数量的消息。
S120、根据预设处理方式,将当前周期获取的消息放入预设线程池中进行并发处理。
其中,预设线程池可以是指在消息处理模块本地中预先设置的一个资源池。预设线程池包含预设数量的线程。线程的预设数量可以基于业务场景和消息处理模块自身的配置信息预先进行设置。示例性地,预设线程池可以包含5个线程。预设处理方式可以是指对每次获取的消息进行处理的方式。预设处理方式可以基于每次获取的消息的预设数量进行设置。
具体地,本实施例可以基于预设处理方式,将当前周期获得的消息放入预设线程池中,并通过开启预设线程池中的相应线程,对放入的消息进行并发处理,从而可以并发执行每个消息对应的业务逻辑,无需等待其他消息执行结束,从而提高了消息的处理效率。并且在将消息放入预设线程池后,便可以继续接收下个周期获得的消息,无需等待当前周期获得的消息处理结束,使得消息获取和消息处理可以同时进行,并且对对消息获取和处理进行了解耦,从而可以避免现有技术中因处理长时消息而导致整个消息队列中的其他消息均被阻塞而无法处理,使得消息队列积压的情况。
示例性地,消息处理模块在将当前周期获取的消息放入预设线程池中进行并发处理时,可以向消息队列控制模块直接返回执行成功信息,以通知消息队列控制模块当前周期获取的消息均被成功处理,避免因超时而导致消息队列控制模块误认为消息处理失败,将这些消息又重新添加至消息队列集群中。
S130、若出现消息处理失败情况,则将处理失败的消息重新放入消息队列集群中,以更新消息队列集群。
具体地,当消息处理模块利用预设线程池中的线程对消息进行并发处理时,若某个消息处理失败,则可以通过预设重试方式,将这些处理失败的消息重新放入消息队列集群中,以便可以重新再次处理这些消息,避免消息的遗漏以及保证消息的成功执行。
本实施例的技术方案,通过在消息处理模块(即消费者)本地中设置一个预设线程池,从而可以将从消息队列集群中获取的预设数量的消息放入预设线程池中,便可以继续周期性地获取消息,无需等待消息处理结束,从而对消息获取和消息处理进行了解耦,同时解决了因处理长时消息慢而导致消息队列积压的问题,并且利用预设线程池可以对多个消息进行并发处理,提高了消息处理效率。
在上述技术方案的基础上,在预设数量为一个时,S120可以包括:检测预设线程池中是否存在空闲线程;若是,则将当前周期获取的消息放入预设线程池中,利用空闲线程对消息进行处理;若否,则间隔预设时间后,返回执行检测预设线程池中是否存在空闲线程的操作。
其中,空闲线程可以是指处于空闲状态的线程,即未执行任务的线程。预设时间可以是指预先设置的一个睡眠时间。示例性地,预设时间可以为50ms。
具体地,当消息处理模块每个周期仅获取一个消息时,可以在获取该消息后,检测当前的预设线程池中是否存在有空闲线程,若存在,则表明当前的预设线程池可以对该消息进行处理,此时可以直接将该消息放入预设线程池中,可以由预设线程池中的任意一个空闲线程执行该消息的业务逻辑。若当前的预设线程池中所有线程均处于执行状态,则表明当前无法对该消息进行处理,此时可以等待预设时间后再次检测当前的预设线程池是否存在空闲线程的操作,直到预设线程池中存在空闲线程为止。在本实施例中,当某个处于执行状态的线程执行完相应消息后,可以将该线程的状态更新为空闲状态,以便利用该线程执行其他的消息。
示例性地,在预设时间内,停止从消息队列集群中周期性地获取预设数量的消息的操作,从而可以避免导致消息处理模块中消息积压无法处理的情况。当在检测到预设线程池中存在空闲线程时,可以继续执行从消息队列集群中周期性地获取预设数量的消息的操作,以便提高系统性能。
实施例二
图2为本发明实施例二提供的一种消息处理方法的流程图,本实施例在上述实施例的基础上,对每次获取两个或两个以上消息的处理方式进行了详细描述。其中与上述实施例相同或相应的术语的解释在此不再赘述。
参见图2,本实施例提供的消息处理方法具体包括以下步骤:
S210、从消息队列集群中周期性地获取预设数量的消息。
S220、将当前周期获取的各个消息逐个放入预设线程池中,并对放入预设线程池中的消息进行并发处理。
具体地,当每个周期从消息队列集群中获取至少两个消息时,可以将获得的各个消息逐个放入到预设线程池中,直到预设线程池中不存在空闲线程为止,并对放入预设线程池中的各个消息进行并发处理,提高处理效率。
S230、若当前的预设线程池已满,且存在未放入预设线程池中的消息,则将未放入预设线程池的消息重新放入消息队列集群中,以更新消息队列集群。
具体地,若当前的预设线程池中的空闲线程的数量大于或等于当前周期获取的消息数量,则可以直接将当前周期获取的所有消息放入线程池中进行并发处理。若当前的预设线程池中的空闲线程的数量小于当前周期获取的消息数量,则在将当前周期获取的各个消息逐个放入预设线程池时,便会存在预设线程池已满(即不存在空闲线程)且还有未放入预设线程池中的消息的情况,此时可以通过预设重试方式,将未放入预设线程池的消息重新放入消息队列集群中,以便后续可以重新获取这些消息,保证消息的正常执行以及避免在消息处理模块中产生消息积压的情况。
示例性地,作为一种实施方式,S230中的“将未放入预设线程池的消息重新放入消息队列集群中,以更新消息队列集群”,可以包括:触发线程池异常指令,并在捕获到线程池异常指令时,将线程池异常指令发送至消息队列集群所对应的消息队列控制模块中,由消息队列控制模块将未放入预设线程池的消息重新放入消息队列集群中,以更新消息队列集群。
具体地,消息处理模块在当前的预设线程池已满,且存在未放入预设线程池中的消息时,可以触发线程池异常指令RejectedExecutionException,并在捕获到该线程池异常指令时,可以将该线程池异常指令发送至消息队列控制模块中。消息队列控制模块在接收到线程池异常指令时,可以基于MQ系统自身逻辑,获得未放入预设线程池的消息,并将这些消息重新放入消息队列集群中的相应消息队列中,以便后续可以从更新后的消息队列集群中周期性地获取消息,从而实现了消息的重试过程。
示例性地,作为另一种实施方式,S230中的“将未放入预设线程池的消息重新放入消息队列集群中,以更新消息队列集群”,还可以包括:将未放入预设线程池的消息的状态设置为初始化状态,以使消息产生模块在检测到处于初始化状态的目标消息时,重新将目标消息放入消息队列集群中,以更新消息队列集群。
具体地,本实施例还可以通过修改消息状态的方式,使得消息产生模块可以自动捕捉到处于初始化状态的消息,从而消息产生模块可以重新将处于初始化状态的目标消息再次发送至消息队列控制模块中,以使消息队列控制模块将接收的这些目标消息放入消息队列集群中,更新消息队列集群。
S240、若出现消息处理失败情况,则将处理失败的消息重新放入消息队列集群中,以更新消息队列集群。
示例性地,作为一种实施方式,S240中的“将处理失败的消息重新放入消息队列集群中,以更新消息队列集群”,可以包括:将处理失败的消息的状态设置为初始化状态,以使消息产生模块在检测到处于初始化状态的目标消息时,重新将目标消息放入消息队列集群中,以更新消息队列集群。
示例性地,作为另一种实施方式,S240中的“将处理失败的消息重新放入消息队列集群中,以更新消息队列集群”,还可以包括:触发线程池异常指令,并在捕获到线程池异常指令时,将线程池异常指令发送至消息队列集群所对应的消息队列控制模块中,由消息队列控制模块将处理失败的消息重新放入消息队列集群中,以更新消息队列集群。
本实施例的技术方案,通过将当前周期获取的至少两个消息逐个放入预设线程池中,当存在预设线程池已满,且存在未放入预设线程池中的消息时,将未放入预设线程池的消息重新放入消息队列集群中,从而可以保证消息的正常执行,以及避免产生消息积压无法处理的情况。
在上述技术方案的基础上,S210可以包括:在第一消息处理模块中的预设线程池已满时,停止利用第一消息处理模块执行从消息队列集群中周期性地获取预设数量的消息的操作;利用第二消息处理模块执行从消息队列集群中周期性地获取预设数量的消息的操作。
具体地,本实施例可以利用多个消息处理模块(即消息处理模块集群)对消息队列集群中的消息进行处理,以便进一步提高消息处理效率。当第一消息处理模块中的预设线程池已满,即无法处理新的消息时,此时可以停止第一消息处理模块从消息队列集群中周期性地获取预设数量的消息的操作,从而避免消息积压在第一消息处理模块无法进行处理的情况。同时利用第二消息处理模块从消息队列集群中周期性地获取预设数量的消息,以便在第二消息处理模块中的预设线程池中处理其余的消息,进而加快了消息处理速度,并且也进一步避免了因处理长时消息慢而导致消息队列积压的问题,提高了系统处理性能。
以下是本发明实施例提供的消息处理装置的实施例,该装置与上述各实施例的消息处理方法属于同一个发明构思,在消息处理装置的实施例中未详尽描述的细节内容,可以参考上述消息处理方法的实施例。
实施例三
图3为本发明实施例三提供的一种消息处理装置的结构示意图,本实施例可适用于对消息队列中的消息进行处理的情况。该装置具体包括:消息获取模块310、消息处理模块320和消息队列集群更新模块330。
消息获取模块310,用于从消息队列集群中周期性地获取预设数量的消息;消息处理模块320,用于根据预设处理方式,将当前周期获取的消息放入预设线程池中进行并发处理;消息队列集群更新模块330,用于若出现消息处理失败情况,则将处理失败的消息重新放入消息队列集群中,以更新消息队列集群。
可选地,预设数量为一个;相应地,消息处理模块320包括:
空闲线程检测单元,用于检测预设线程池中是否存在空闲线程;
消息处理单元,用于若是,则将当前周期获取的消息放入预设线程池中,利用空闲线程对消息进行处理;
时间等待单元,用于若否,则间隔预设时间后,返回执行检测预设线程池中是否存在空闲线程的操作。
可选地,消息处理模块320还可以包括:消息获取停止单元,用于在预设时间内,停止从消息队列集群中周期性地获取预设数量的消息的操作。
可选地,预设数量为两个或两个以上;相应地,消息处理模块320还包括:
并发处理单元,用于将当前周期获取的各个消息逐个放入预设线程池中,并对放入预设线程池中的消息进行并发处理;
消息放回单元,用于若当前的预设线程池已满,且存在未放入预设线程池中的消息,则将未放入预设线程池的消息重新放入消息队列集群中,以更新消息队列集群。
可选地,消息放回单元,具体用于:触发线程池异常指令,并在捕获到线程池异常指令时,将线程池异常指令发送至消息队列集群所对应的消息队列控制模块中,由消息队列控制模块将未放入预设线程池的消息重新放入消息队列集群中,以更新消息队列集群。
可选地,消息队列集群更新模块330,具体用于:
将处理失败的消息的状态设置为初始化状态,以使消息产生模块在检测到处于初始化状态的目标消息时,重新将目标消息放入消息队列集群中,以更新消息队列集群。
可选地,消息获取模块310,具体用于:
在第一消息处理模块中的预设线程池已满时,停止利用第一消息处理模块执行从消息队列集群中周期性地获取预设数量的消息的操作;
利用第二消息处理模块执行从消息队列集群中周期性地获取预设数量的消息的操作。
本发明实施例所提供的消息处理装置可执行本发明任意实施例所提供的消息处理方法,具备执行消息处理方法相应的功能模块和有益效果。
实施例四
图4为本发明实施例四提供的一种设备的结构示意图。图4示出了适于用来实现本发明实施方式的示例性设备12的框图。图4显示的设备12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图4所示,设备12以通用计算设备的形式表现。设备12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
设备12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。设备12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图4未显示,通常称为“硬盘驱动器”)。尽管图4中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。系统存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如系统存储器28中,这样的程序模块42包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该设备12交互的设备通信,和/或与使得该设备12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与设备12的其它模块通信。应当明白,尽管图中未示出,可以结合设备12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理单元16通过运行存储在系统存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本发实施例所提供的一种消息处理方法步骤,该方法包括:
从消息队列集群中周期性地获取预设数量的消息;
根据预设处理方式,将当前周期获取的消息放入预设线程池中进行并发处理;
若出现消息处理失败情况,则将处理失败的消息重新放入消息队列集群中,以更新消息队列集群。
当然,本领域技术人员可以理解,处理器还可以实现本发明任意实施例所提供的保留库存量的确定方法的技术方案。
实施例五
本实施例五提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任意实施例所提供的消息处理方法步骤,该方法包括:
从消息队列集群中周期性地获取预设数量的消息;
根据预设处理方式,将当前周期获取的消息放入预设线程池中进行并发处理;
若出现消息处理失败情况,则将处理失败的消息重新放入消息队列集群中,以更新消息队列集群。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是但不限于:电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
本领域普通技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个计算装置上,或者分布在多个计算装置所组成的网络上,可选地,他们可以用计算机装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件的结合。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

Claims (10)

1.一种消息处理方法,其特征在于,包括:
从消息队列集群中周期性地获取预设数量的消息;
根据预设处理方式,将当前周期获取的所述消息放入预设线程池中进行并发处理;
若出现消息处理失败情况,则将处理失败的消息重新放入所述消息队列集群中,以更新所述消息队列集群。
2.根据权利要求1所述的方法,其特征在于,所述预设数量为一个;相应地,根据预设处理方式,将当前周期获取的所述消息放入预设线程池中进行并发处理,包括:
检测预设线程池中是否存在空闲线程;
若是,则将当前周期获取的所述消息放入预设线程池中,利用空闲线程对所述消息进行处理;
若否,则间隔预设时间后,返回执行所述检测预设线程池中是否存在空闲线程的操作。
3.根据权利要求2所述的方法,其特征在于,在所述预设时间内,停止从消息队列集群中周期性地获取预设数量的消息的操作。
4.根据权利要求1所述的方法,其特征在于,所述预设数量为两个或两个以上;相应地,根据预设处理方式,将当前周期获取的所述消息放入预设线程池中进行并发处理,包括:
将当前周期获取的各个消息逐个放入预设线程池中,并对放入所述预设线程池中的消息进行并发处理;
若当前的预设线程池已满,且存在未放入预设线程池中的消息,则将未放入预设线程池的消息重新放入所述消息队列集群中,以更新所述消息队列集群。
5.根据权利要求4所述的方法,其特征在于,将未放入预设线程池的消息重新放入所述消息队列集群中,以更新所述消息队列集群,包括:
触发线程池异常指令,并在捕获到所述线程池异常指令时,将所述线程池异常指令发送至所述消息队列集群所对应的消息队列控制模块中,由所述消息队列控制模块将未放入预设线程池的消息重新放入所述消息队列集群中,以更新所述消息队列集群。
6.根据权利要求1所述的方法,其特征在于,将处理失败的消息重新放入所述消息队列集群中,以更新所述消息队列集群,包括:
将处理失败的消息的状态设置为初始化状态,以使消息产生模块在检测到处于初始化状态的目标消息时,重新将所述目标消息放入所述消息队列集群中,以更新所述消息队列集群。
7.根据权利要求1所述的方法,其特征在于,从消息队列集群中周期性地获取预设数量的消息,包括:
在第一消息处理模块中的预设线程池已满时,停止利用所述第一消息处理模块执行从消息队列集群中周期性地获取预设数量的消息的操作;
利用第二消息处理模块执行从消息队列集群中周期性地获取预设数量的消息的操作。
8.一种消息处理装置,其特征在于,包括:
消息获取模块,用于从消息队列集群中周期性地获取预设数量的消息;
消息处理模块,用于根据预设处理方式,将当前周期获取的所述消息放入预设线程池中进行并发处理;
消息队列集群更新模块,用于若出现消息处理失败情况,则将处理失败的消息重新放入所述消息队列集群中,以更新所述消息队列集群。
9.一种设备,其特征在于,所述设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一所述的消息处理方法步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一所述的消息处理方法步骤。
CN201910749233.4A 2019-08-14 2019-08-14 一种消息处理方法、装置、设备和存储介质 Pending CN112395097A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910749233.4A CN112395097A (zh) 2019-08-14 2019-08-14 一种消息处理方法、装置、设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910749233.4A CN112395097A (zh) 2019-08-14 2019-08-14 一种消息处理方法、装置、设备和存储介质

Publications (1)

Publication Number Publication Date
CN112395097A true CN112395097A (zh) 2021-02-23

Family

ID=74601356

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910749233.4A Pending CN112395097A (zh) 2019-08-14 2019-08-14 一种消息处理方法、装置、设备和存储介质

Country Status (1)

Country Link
CN (1) CN112395097A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113138883A (zh) * 2021-05-14 2021-07-20 北京字节跳动网络技术有限公司 消息处理方法、装置、存储介质及电子设备
CN113176967A (zh) * 2021-04-29 2021-07-27 北京奇艺世纪科技有限公司 数据的处理方法及装置、电子设备和计算机可读存储介质
CN115098220A (zh) * 2022-06-17 2022-09-23 西安电子科技大学 基于容器线程管理技术的大规模网络节点拟真方法
WO2024113644A1 (zh) * 2022-11-30 2024-06-06 三一海洋重工有限公司 存储数据的方法、自动化系统及机械设备

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113176967A (zh) * 2021-04-29 2021-07-27 北京奇艺世纪科技有限公司 数据的处理方法及装置、电子设备和计算机可读存储介质
CN113176967B (zh) * 2021-04-29 2023-08-15 北京奇艺世纪科技有限公司 数据的处理方法及装置、电子设备和计算机可读存储介质
CN113138883A (zh) * 2021-05-14 2021-07-20 北京字节跳动网络技术有限公司 消息处理方法、装置、存储介质及电子设备
CN113138883B (zh) * 2021-05-14 2024-02-02 北京字节跳动网络技术有限公司 消息处理方法、装置、存储介质及电子设备
CN115098220A (zh) * 2022-06-17 2022-09-23 西安电子科技大学 基于容器线程管理技术的大规模网络节点拟真方法
CN115098220B (zh) * 2022-06-17 2024-04-16 西安电子科技大学 基于容器线程管理技术的大规模网络节点拟真方法
WO2024113644A1 (zh) * 2022-11-30 2024-06-06 三一海洋重工有限公司 存储数据的方法、自动化系统及机械设备

Similar Documents

Publication Publication Date Title
CN112395097A (zh) 一种消息处理方法、装置、设备和存储介质
CN108647104B (zh) 请求处理方法、服务器及计算机可读存储介质
US10521393B2 (en) Remote direct memory access (RDMA) high performance producer-consumer message processing
US8756613B2 (en) Scalable, parallel processing of messages while enforcing custom sequencing criteria
CN107341062B (zh) 一种数据推送方法、装置、设备以及存储介质
CN110740145B (zh) 消息消费方法、装置、存储介质及电子设备
EP2972852B1 (en) System management interrupt handling for multi-core processors
CN110737534A (zh) 任务的处理方法、装置和服务器
US9529651B2 (en) Apparatus and method for executing agent
US10997099B2 (en) I/O request processing method in virtual machine, device and computer readable medium
US20140067886A1 (en) Information processing apparatus, method of outputting log, and recording medium
CN110851276A (zh) 一种业务请求处理方法、装置、服务器和存储介质
CN111801653A (zh) 用于多线程数据处理环境的线程调度
KR102454695B1 (ko) 캐시 장치, 캐시, 시스템, 데이터 처리 방법, 장치 및 매체
CN110515749B (zh) 信息发送的队列调度的方法、装置、服务器和存储介质
CN113190427A (zh) 卡顿监控方法、装置、电子设备及存储介质
CN110532203B (zh) 一种nand复位方法、装置、电子设备和存储介质
CN110445874B (zh) 一种会话处理方法、装置、设备和存储介质
CN111367783B (zh) 应用程序的测试方法、装置及电子设备
CN108874560B (zh) 进行通信的方法和通信设备
CN106484536B (zh) 一种io调度方法、装置和设备
CN115767448B (zh) 一种消息发送方法、装置、设备和存储介质
US9588924B2 (en) Hybrid request/response and polling messaging model
CN110221928B (zh) 信息记录方法、装置、终端及存储介质
CN113778711B (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