CN112181737A - 消息处理方法、装置、电子设备及介质 - Google Patents
消息处理方法、装置、电子设备及介质 Download PDFInfo
- Publication number
- CN112181737A CN112181737A CN202011027584.3A CN202011027584A CN112181737A CN 112181737 A CN112181737 A CN 112181737A CN 202011027584 A CN202011027584 A CN 202011027584A CN 112181737 A CN112181737 A CN 112181737A
- Authority
- CN
- China
- Prior art keywords
- message
- unprocessed
- processing
- client
- queue
- 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
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 33
- 238000012545 processing Methods 0.000 claims abstract description 165
- 238000000034 method Methods 0.000 claims abstract description 56
- 238000012958 reprocessing Methods 0.000 claims abstract description 48
- 230000008569 process Effects 0.000 claims abstract description 31
- 238000004590 computer program Methods 0.000 claims description 4
- 238000012790 confirmation Methods 0.000 claims description 4
- 230000008859 change Effects 0.000 claims description 3
- 230000002085 persistent effect Effects 0.000 claims description 3
- 230000007246 mechanism Effects 0.000 abstract description 4
- 238000010586 diagram Methods 0.000 description 9
- 230000003287 optical effect Effects 0.000 description 6
- 230000006870 function Effects 0.000 description 4
- 230000003111 delayed effect Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 239000013307 optical fiber Substances 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000002860 competitive effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/202—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
- G06F11/2023—Failover techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Quality & Reliability (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本申请实施例公开了一种消息处理方法、装置、电子设备及介质。该方法由服务端执行时,包括:读取未处理列表中的未处理消息;其中,所述未处理消息为未被第一消费客户端成功处理的消息;将所述未处理消息的处理对象变更为第二消费客户端;控制所述第二消费客户端根据所述未处理消息从消息队列中被读取的次数,以及再处理时间,对所述未处理消息进行处理。上述方案能够通过第二消费客户端的引入,实现了对未成功处理消息的失败重试机制,通过第二消费客户端根据未处理消息被读取的次数以及再处理时间进行处理,从而在不影响第一消费客户端正常处理进程的前提下,控制第二消费客户端根据未处理消息的实际情况进行有效的重试处理。
Description
技术领域
本申请实施例涉及消息处理领域,尤其涉及一种消息处理方法、装置、电子设备及介质。
背景技术
企业级调度系统含有事件接收、事件处理、派发、翻牌、作业管理、执行、定时服务等多个处理功能。调度系统从事件接收开始到作业执行结束,复杂庞大的链路需要引入消息中间件,以提高大批量作业的处理效率,提升企业级调度系统的调度性能。目前调度系统采用的消息中间件一般有Kafka、RabbitMQ、RocketMQ,上述中间件被广泛应用。
目前,消息中间件对于已被读取但是未处理成功的消息,处理方式仅为重复处理,而如果是处理消息的消费客户端本身的问题没有解决,或是消息本身存在问题,那么尽管重复处理多次,处理结果也是失败的,并且多次重复处理消耗了处理资源,降低了对其他消息的处理效率。
发明内容
本申请实施例提供一种消息处理方法、装置、设备及存储介质,以对为未成功处理的消息进行有效重试处理。
在一个实施例中,本申请实施例提供了一种消息处理方法,由消息服务端执行,该方法包括:
读取未处理列表中的未处理消息;其中,所述未处理消息为未被第一消费客户端成功处理的消息;
将所述未处理消息的处理对象变更为第二消费客户端;
控制所述第二消费客户端根据所述未处理消息从消息队列中被读取的次数,以及再处理时间,对所述未处理消息进行处理。
在又一个实施例中,本申请实施例还提供了一种消息处理方法,由第二消费客户端执行,该方法包括:
从未处理列表中读取处理对象为第二消费客户端的未处理消息;
根据所述未处理消息从消息队列中被读取的次数,以及再处理时间,对所述未处理消息进行处理。
在另一个实施例中,本申请实施例还提供了一种消息处理装置,该装置包括:
未处理消息读取模块,用于读取未处理列表中的未处理消息;其中,所述未处理消息为未被第一消费客户端成功处理的消息;
变更模块,用于将所述未处理消息的处理对象变更为第二消费客户端;
处理模块,用于控制所述第二消费客户端根据所述未处理消息从消息队列中被读取的次数,以及再处理时间,对所述未处理消息进行处理。
在再一个实施例中,本申请实施例还提供了一种消息处理装置,该装置包括:
消息读取模块,用于从未处理列表中读取处理对象为第二消费客户端的未处理消息;
消息处理模块,用于根据所述未处理消息从消息队列中被读取的次数,以及再处理时间,对所述未处理消息进行处理。
在一个实施例中,本申请实施例还提供了一种电子设备,包括:一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本申请任一实施例中的由服务端执行的消息处理方法,或者实现本申请任一实施例中的由第二消费客户端执行的消息处理方法。
在一个实施例中,本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本申请任一实施例所述的由服务端执行的消息处理方法,或者实现本申请任一实施例所述的由第二消费客户端执行的消息处理方法。
本申请实施例中,通过将未处理消息的处理对象变更为第二消费客户端,并控制第二消费客户端根据未处理消息被读取的次数以及再处理时间,对未处理消息进行重试处理,从而通过第二消费客户端的引入,实现了对未成功处理消息的失败重试机制,在不影响第一消费客户端正常处理进程的前提下,实现对未成功处理消息的重试处理。另外,考虑到未处理消息的被读取次数以及再处理时间,从而避免了多次无用的重复处理浪费处理资源的问题,实现根据未处理消息的实际情况进行有效重试。
附图说明
图1为本申请一种实施例提供的由服务端执行的消息处理方法的流程图;
图2为本申请一种实施例提供的消息队列结构图;
图3为本申请另一实施例提供的由服务端执行的消息处理方法的流程图;
图4为本申请一种实施例提供的由第二消费客户端执行的消息处理方法的流程图;
图5为本申请一种实施例提供的消息处理过程示意图;
图6为本申请一种实施例提供的消息处理装置的结构示意图;
图7为本申请另一种实施例提供的消息处理装置的结构示意图;
图8为本申请一种实施例提供的电子设备的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本申请,而非对本申请的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本申请相关的部分而非全部结构。
图1为本申请一种实施例提供的消息处理方法的流程图。本实施例提供的消息处理方法可适用于对未处理消息进行处理的情况。该方法具体可以由消息处理装置执行,该装置可以由软件和/或硬件的方式实现,该装置可以集成在电子设备中。参见图1,本申请实施例的方法具体包括:
S110、读取未处理列表中的未处理消息;其中,所述未处理消息为未被第一消费客户端成功处理的消息。
其中,未处理列表中包括已经被第一消费客户端读取,但是未被成功处理的消息。第一消费客户端可以为读取消息队列中的消息并进行处理的客户端,第一消费客户端可以为至少一个。本申请实施例中,消息队列的存储基于Redis Stream实现。如图2所示,其中,Consumer Group为消费客户端组,Consumer为其中的消费客户端,stream direction为消息读取方向,Message Content为消息内容。消息以链表的形式存在,将所有加入的消息都串起来,每个消息都有一个唯一的ID和对应的内容。对消息队列中的消息存储于存储器中,进行持久化存储,服务器重启后,消息仍然存在。每个队列(stream)都可以被多个消费客户端组访问,每个消费客户端组会有个游标last_delivered_id,last_delivered_id在消息队列之上往前移动,表示当前消费客户端组已经读取到哪条消息了。每个消费客户端组访问消息队列时,都对应唯一的名称,消费客户端组不会自动创建,它需要单独的指令进行创建,并且需要指定从消息队列的某个消息ID开始消费,这个ID用来初始化last_delivered_id变量。每个消费客户端组,组间的状态是独立、相互不受影响。同一个消费客户端组可以包括至少一个第一消费客户端,第一消费客户端之间是竞争关系,任意一个第一消费客户端读取了消息都会使游标last_delivered_id往前移动,消费客户端组内的其他第一消费客户端无法再读取该消息。另外,消费客户端组内部会保存一个动态变量pending_ids,记录了当前已经被第一消费客户端读取但是还未确认成功处理的消息。第一消费客户端读取一个消息,动态变量pending_ids中的数量加1,第一消费客户端成功处理一个消息,动态变量pending_ids中的数量减1。pending_ids形成待处理列表(Pending Entries List,PEL)。
在本申请实施例中,对于未处理列表中的未处理消息,进行读取,以便对未处理消息进一步重试处理,避免未处理消息长时间无法被成功处理影响处理进程。对未处理列表中的未处理消息进行读取时,可以按照预设频率进行读取,也可以根据第一消费客户端的实际处理时间确定读取的时间间隔。读取的未处理消息的数量可以根据情况设置,可以为至少一个。
S120、将所述未处理消息的处理对象变更为第二消费客户端。
其中,第二消费客户端为处理任务与第一消费客户端处理任务不同的客户端。对应于同一个消费客户端组,可以有至少一个第二消费客户端。第二消费客户端可以对未被第一消费客户端成功处理的消息进行重试处理,而不会占用第一消费客户端的处理资源,并且避免了第一消费客户端对未处理消息重复处理导致消耗处理资源影响处理进程的问题。
在本申请实施例中,将未处理消息的处理对象变更为第二消费客户端,可以将未处理消息设置附加属性,设置为“处理对象:第二消费客户端”,从而使第一消费客户端和第二消费客户端能够识别出该未处理消息的处理对象为第二消费客户端。
S130、控制所述第二消费客户端根据所述未处理消息从消息队列中被读取的次数,以及再处理时间,对所述未处理消息进行处理。
对于未处理消息,如果由第一消费客户端无限制的对其重试处理,则会消耗第一消费客户端的资源,降低处理效率。并且部分消息可能自身存在错误,是无法被成功处理的,而令第消费客户端无限制地重试处理,不仅消耗处理资源,并且也不会对未处理消息处理成功。本申请实施例中,控制第二消费客户端对未处理消息进行处理,避免影响第一消费客户端的正常处理线程。
如果未处理消息被第一消费客户端重新读取了多次都未能被成功处理,或者被重试处理的时长较长,则说明该未处理消息是无论重试处理多少次都无法被成功处理的,不需要对其进行无限制的重试处理。因此,本申请实施例中根据未处理消息从消息队列中被读取的次数,以及再处理时间,对未处理消息进行处理,从而避免了对错误的消息无限制重复处理消耗处理资源影响处理效率的问题。
在本申请实施例中,可以预先设置预设限制次数,以及预先设置预设再处理时间,从而在未处理消息被读取的次数达到预设限制次数或者再处理时间达到预设再处理时间时,不再继续对未处理消息进行再处理,从而在对未处理消息进行适当次数的重试仍然失败时,不再继续浪费处理资源。
本申请实施例中,通过将未处理消息的处理对象变更为第二消费客户端,并控制第二消费客户端根据未处理消息被读取的次数以及再处理时间,对未处理消息进行重试处理,从而通过第二消费客户端的引入,实现了对未成功处理消息的失败重试机制,在不影响第一消费客户端正常处理进程的前提下,实现对未成功处理消息的重试处理。另外,考虑到未处理消息的被读取次数以及再处理时间,从而避免了多次无用的重复处理浪费处理资源的问题,实现根据未处理消息的实际情况进行有效重试。
图3为本申请另一实施例提供的消息处理方法的流程图。本申请实施例为对上述实施例基础上对上述实施例进行优化,未在本实施例中详细描述的细节详见上述实施例。参见图3,本实施例提供的消息处理方法可以包括:
S210、针对消费客户端组,记录消费客户端组中的第一消费客户端从消息队列中读取的目标消息,生成未处理列表。
示例性的,可以针对每一个消费客户端组,生成一个未处理列表,当该消费客户端组中的消费客户端从消费队列中读取到目标消息时,即将该消息的标识记录于未处理列表中。未处理列表中可以仅记录目标消息的标识,并不记录目标消息的内容,从而节省存储容量。
S220、若接收到所述第一消费客户端发送的针对任一目标消息的成功处理确认通知,则将该目标消息从所述未处理列表中删除。
示例性的,当第一客户端对目标消息处理成功时,则会向服务端返回成功处理确认通知,通知服务端对该目标消息以处理成功。服务端则将该目标消息从未处理列表中删除,未处理列表中记录第一消费客户端未处理的目标消息。
S230、读取未处理列表中的未处理消息;其中,所述未处理消息为未被第一消费客户端成功处理的消息。
S240、将所述未处理消息的处理对象变更为第二消费客户端。
在本申请实施例中,将所述未处理消息的处理对象变更为第二消费客户端,包括:根据所述未处理消息从消息队列中被读取时刻到当前时刻的持续时长,或第一消费客户端针对所述未处理消息发送的通知消息,将所述未处理消息的处理对象变更为第二消费客户端。
示例性的,如果未处理消息从被读取时刻到当前时刻的持续时长较长,或者第一客户端对未处理消息未成功处理,向服务端发送通知消息,则说明为处理消息无法被及时处理,需要由第二消费客户端继续进行处理,以免未处理消息一直处于被第一消费客户端读取的状态占用第一消费客户端的处理资源和存储空间,以及无法被及时处理。
根据所述未处理消息从消息队列中被读取时刻到当前时刻的持续时长,将所述未处理消息的处理对象变更为第二消费客户端,包括:若所述未处理消息从消息队列中被读取时刻到当前时刻的持续时长达到预设时长,则将所述未处理消息的处理对象变更为第二消费客户端。
示例性的,预设时长可以根据实际情况确定,例如可以设置为2小时。如果未处理消息从被读取时刻到当前时刻的会持续时长达到预设时长,则说明该未处理被第一消费客户端读取但是一直无法被及时处理,因此,将该未处理消息的处理对象变更为第二消费者客户端,以由第二消费客户端对未处理消息进行处理。
根据第一消费客户端针对所述未处理消息发送的通知消息,将所述未处理消息的处理对象变更为第二消费客户端,包括:若接收到第一消费客户端发送的针对未处理消息的消息错误通知,则将所述未处理消息的被读取的次数设置为预设限制次数;将所述未处理消息的处理对象变更为第二消费客户端。根据第一消费客户端针对所述未处理消息发送的通知消息,将所述未处理消息的处理对象变更为第二消费客户端,包括:若接收到第一消费客户端发送的针对未处理消息的处理失败通知,则将所述未处理消息的被读取的次数进行累加;将所述未处理消息的处理对象变更为第二消费客户端。
示例性的,如果第一消费客户端向服务端范围的消息为错误消息,则说明该未处理消息是无法被成功处理的错误消息,例如返回DEAD,则将该未处理消息的被读取次数设置为预设限制次数,以由第二消费客户端对于被读取次数满足预设限制次数的为处理消息进行处理。如果服务端接收到第一消费客户端发送的针对未处理消息的通知为处理失败,例如返回NONE或REJECT,则确定可能是由于该第一消费客户端自身问题导致的无法对未处理消息及时处理,因此将该未处理消息被读取次数累加,以由第二消费客户端对被读取的次数未达到预设限制次数的未处理消息进行处理。
S250、控制所述第二消费客户端根据所述未处理消息从消息队列中被读取的次数,以及再处理时间,对所述未处理消息进行处理。
具体的,如果第二消费客户端判断出未处理消息被读取的次数达到预设限制次数,则将该未处理消息从消息队列中删除,并置于黑名单队列,从而使其他第一消费客户端不再读取该消息进行处理。若所述未处理消息从消息队列中被读取的次数未超过预设限制次数,则确定再处理时间是否达到预设再处理时间;若是,则将所述未处理消息从消息队列中删除,并将所述未处理消息重新插入消息队列,以被第一消费客户端重新读取。
本申请实施例的技术方案,通过对未处理消息的记录,以及将未处理消息的处理对象变更为第二消费客户端,从而通过第二消费客户端根据未处理消息被读取的次数以及再处理时间进行处理,在不影响第一消费客户端正常处理进程的前提下,实现对未成功处理消息的重试处理。
图4本申请一种实施例提供的由第二消费客户端执行的消息处理方法的流程图。本实施例提供的消息处理方法可适用于对未处理消息进行处理的情况。该方法具体可以由消息处理装置执行,该装置可以由软件和/或硬件的方式实现,该装置可以集成在电子设备中。参见图4本申请实施例的方法具体包括:
S310、从未处理列表中读取处理对象为第二消费客户端的未处理消息。
示例性的,如果未处理列表中的未处理消息的处理对象为第二消费客户端,则其附加属性为“处理对象:第二消费客户端”,因此,第二消费客户端可以读取到附加属性为“处理对象:第二消费客户端”的未处理消息,并进行处理。
S320、根据所述未处理消息从消息队列中被读取的次数,以及再处理时间,对所述未处理消息进行处理。
如果未处理消息被第一消费客户端重新读取了多次都未能被成功处理,或者被重试处理的时长较长,则说明该未处理消息是无论重试处理多少次都无法被成功处理的,不需要对其进行无限制的重试处理。因此,本申请实施例中根据未处理消息从消息队列中被读取的次数,以及再处理时间,对未处理消息进行处理,从而避免了对错误的消息无限制重复处理消耗处理资源影响处理效率的问题。
在本申请实施例,根据所述未处理消息从消息队列中被读取的次数,对所述未处理消息进行处理,包括:若所述未处理消息从消息队列中被读取的次数超过预设限制次数,则将该未处理消息从消息队列中删除,并置于黑名单队列。根据所述未处理消息从消息队列中被读取的次数,以及再处理时间,对所述未处理消息进行处理,包括:若所述未处理消息从消息队列中被读取的次数未超过预设限制次数,则确定再处理时间是否达到预设再处理时间;若是,则将所述未处理消息从消息队列中删除,并将所述未处理消息重新插入消息队列,以被第一消费客户端重新读取。将所述未处理消息重新插入消息队列,包括:为所述未处理消息定义新标识;将存储被读取的次数的哈希表中的未处理消息对应的原标识,替换为新标识;将具有新标识的未处理消息重新插入消息队列。
示例性的,如图5所示,第二消费客户端如果判断未处理消息被读取的次数超过预设限制次数,则确定该未处理消息已经多次无法被第一消费客户端成功处理,并且插入队列后多次被第一消费客户端读取,却仍然无法被成功处理,此时则不再继续将其插入队列被第一消费客户端中心读取处理,即确定该未处理消息为无法被成功处理的消息,直接将其加入黑名单队列中,即避免第一消费客户端多次读取重试处理浪费处理资源。如果为处理消息的被读取次数未超过预设限制次数,则确定再处理时间是否达到预设再处理时间,如果达到,则将未处理消息从当前消息队列中删除,并重新插入到消息队列中,以便再次被第一消费客户端读取并处理。如果没有达到,则等待时间达到预设再处理时间再进行重新插入消息队列的处理。可以将一个未处理消息重现插入消息队列,也可以同时将多个未处理消息重新插入队列。在本申请实施例中,再处理时间为给第一消费客户端预留的解决问题与调试的时间。由于第一消费客户端对未处理消息处理失败,有可能是因为第一消费客户端存在问题,因此,为第一消费客户端预留解决自身问题与调试的时间,以使第一消费客户端有足够的时间进行解决问题以及再次读取重新入队的未处理消息进行处理。再处理时间可以依次延长,例如,未处理消息第一次重新插入队列进行重试处理时,设置再处理时间为1秒,第二次重新插入队列进行重试处理时,设置再处理时间为5秒,从而为第一消费客户端提供更多的时间解决问题。
具体的,未处理消息被读取的次数存储于哈希表中。如果将未处理消息重新插入队列,则将该未处理消息的标识更换为新标识,根据未处理消息的原标识,从哈希表查找到该未处理消息,将该未处理消息的原标识修改为新标识,再将具有新标识的未处理消息重新插入到消息队列中,以被第一消费客户端重现读取并处理,实现对未处理消息的重试处理,并且不会影响对该未处理消息被读取次数的正常统计,已实现对未处理消息被读取次数的准确统计。
在本申请实施例中,所述方法还包括:将所述未处理消息从未处理列表中删除。由于处理对象为第二消费客户端的未处理消息,均为第一消费客户端当前无法处理的消息,在第二消费客户端读取了未处理消息后,可以将未处理消息从未处理列表中删除,从而避免重复读取处理。在本申请中,将未处理消息置于黑名单队列、从未处理列表中删除该未处理消息以及从消息队列中删除该未处理消息可以同时执行,将未处理消息重新插入消息队列、从未处理列表中删除该未处理消息以及从消息队列中删除该未处理消息可以同时执行。
本申请实施例中,通过第二消费客户端根据未处理消息被读取的次数以及再处理时间,对未处理消息进行重试处理,从而通过第二消费客户端的引入,实现了对未成功处理消息的失败重试机制,在不影响第一消费客户端正常处理进程的前提下,实现对未成功处理消息的重试处理。另外,考虑到未处理消息的被读取次数以及再处理时间,从而避免了多次无用的重复处理浪费处理资源的问题,实现根据消息处理的实际情况进行有效重试。
图6为本申请一种实施例提供的消息处理装置的结构示意图。该装置可适用于对未处理消息进行处理的情况。该装置可以由软件和/或硬件的方式实现,该装置可以集成在电子设备中。参见图6,该装置具体包括:
未处理消息读取模块410,用于读取未处理列表中的未处理消息;其中,所述未处理消息为未被第一消费客户端成功处理的消息;
变更模块420,用于将所述未处理消息的处理对象变更为第二消费客户端;
处理模块430,用于控制所述第二消费客户端根据所述未处理消息从消息队列中被读取的次数,以及再处理时间,对所述未处理消息进行处理。
在本申请实施例中,所述装置还包括:
未处理列表生成模块,用于针对消费客户端组,记录消费客户端组中的第一消费客户端从消息队列中读取的目标消息,生成未处理列表;
通知接收模块,用于若接收到所述第一消费客户端发送的针对任一目标消息的成功处理确认通知,则将该目标消息从所述未处理列表中删除。
在本申请实施例中,变更模块420,具体用于:
根据所述未处理消息从消息队列中被读取时刻到当前时刻的持续时长,或第一消费客户端针对所述未处理消息发送的通知消息,将所述未处理消息的处理对象变更为第二消费客户端。
在本申请实施例中,变更模块420,具体用于:
若所述未处理消息从消息队列中被读取时刻到当前时刻的持续时长达到预设时长,则将所述未处理消息的处理对象变更为第二消费客户端。
在本申请实施例中,变更模块420,包括:
次数设置单元,用于若接收到第一消费客户端发送的针对未处理消息的消息错误通知,则将所述未处理消息的被读取的次数设置为预设限制次数。
第一处理对象变更单元,用于将所述未处理消息的处理对象变更为第二消费客户端。
在本申请实施例中,变更模块420,包括:
次数累加单元,用于若接收到第一消费客户端发送的针对未处理消息的处理失败通知,则将所述未处理消息的被读取的次数进行累加。
第二处理对象变更单元,用于将所述未处理消息的处理对象变更为第二消费客户端。
在本申请实施例中,所述装置还包括:
存储模块,用于对消息队列中的消息存储于存储器中,进行持久化存储。
本申请实施例所提供的消息处理装置可执行本申请任意实施例所提供的由服务端执行的消息处理方法,具备执行方法相应的功能模块和有益效果。
图7为本申请另一种实施例提供的消息处理装置的结构示意图。该装置可适用于对未处理消息进行处理的情况。该装置可以由软件和/或硬件的方式实现,该装置可以集成在电子设备中。参见图7,该装置具体包括:
消息读取模块510,用于从未处理列表中读取处理对象为第二消费客户端的未处理消息;
消息处理模块520,用于根据所述未处理消息从消息队列中被读取的次数,以及再处理时间,对所述未处理消息进行处理。
在本申请实施例中,消息处理模块520,具体用于:
若所述未处理消息从消息队列中被读取的次数超过预设限制次数,则将该未处理消息从消息队列中删除,并置于黑名单队列。
在本申请实施例中,消息处理模块520,包括:
时间确定单元,用于若所述未处理消息从消息队列中被读取的次数未超过预设限制次数,则确定再处理时间是否达到预设再处理时间。
插入单元,用于若是,则将所述未处理消息从消息队列中删除,并将所述未处理消息重新插入消息队列,以被第一消费客户端重新读取。
在本申请实施例中,插入单元具体用于:
为所述未处理消息定义新标识;
将存储被读取的次数的哈希表中的未处理消息对应的原标识,替换为新标识;
将具有新标识的未处理消息重新插入消息队列。
在本申请实施例中,所述装置还包括:
删除模块,用于将所述未处理消息从未处理列表中删除。
本申请实施例所提供的消息处理装置可执行本申请任意实施例所提供的由第二消费客户端执行的消息处理方法,具备执行方法相应的功能模块和有益效果。
图8为本申请一种实施例提供的电子设备的结构示意图。图8示出了适于用来实现本申请实施例的示例性电子设备612的框图。图8显示的电子设备612仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图8所示,电子设备612可以包括:一个或多个处理器616;存储器628,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器616执行,使得所述一个或多个处理器616实现本申请实施例所提供的由服务端执行的消息处理方法,包括:
读取未处理列表中的未处理消息;其中,所述未处理消息为未被第一消费客户端成功处理的消息;
将所述未处理消息的处理对象变更为第二消费客户端;
控制所述第二消费客户端根据所述未处理消息从消息队列中被读取的次数,以及再处理时间,对所述未处理消息进行处理。
或者实现本申请实施例所提供的由第二消费客户端执行的消息处理方法,包括:
从未处理列表中读取处理对象为第二消费客户端的未处理消息;
根据所述未处理消息从消息队列中被读取的次数,以及再处理时间,对所述未处理消息进行处理。
电子设备612的组件可以包括但不限于:一个或者多个处理器或者处理器616,存储器628,连接不同设备组件(包括存储器628和处理器616)的总线618。
总线618表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
电子设备612典型地包括多种计算机设备可读存储介质。这些存储介质可以是任何能够被电子设备612访问的可用存储介质,包括易失性和非易失性存储介质,可移动的和不可移动的存储介质。
存储器628可以包括易失性存储器形式的计算机设备可读存储介质,例如随机存取存储器(RAM)630和/或高速缓存存储器632。电子设备612可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机设备存储介质。仅作为举例,存储系统634可以用于读写不可移动的、非易失性磁存储介质(图8未显示,通常称为“硬盘驱动器”)。尽管图8中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光存储介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据存储介质接口与总线618相连。存储器628可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本申请各实施例的功能。
具有一组(至少一个)程序模块642的程序/实用工具640,可以存储在例如存储器628中,这样的程序模块642包括但不限于操作设备、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块642通常执行本申请所描述的实施例中的功能和/或方法。
电子设备612也可以与一个或多个外部设备614(例如键盘、指向设备、显示器624等)通信,还可与一个或者多个使得用户能与该电子设备612交互的设备通信,和/或与使得该电子设备612能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口622进行。并且,电子设备612还可以通过网络适配器620与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图8所示,网络适配器620通过总线618与电子设备612的其它模块通信。应当明白,尽管图8中未示出,可以结合电子设备612使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID设备、磁带驱动器以及数据备份存储设备等。
处理器616通过运行存储在存储器628中的多个程序中其他程序的至少一个,从而执行各种功能应用以及数据处理,例如实现本申请实施例所提供的一种消息处理方法。
本申请一种实施例提供了一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行由服务端执行的消息处理方法,包括:
读取未处理列表中的未处理消息;其中,所述未处理消息为未被第一消费客户端成功处理的消息;
将所述未处理消息的处理对象变更为第二消费客户端;
控制所述第二消费客户端根据所述未处理消息从消息队列中被读取的次数,以及再处理时间,对所述未处理消息进行处理。
或者实现本申请实施例所提供的由第二消费客户端执行的消息处理方法,包括:
从未处理列表中读取处理对象为第二消费客户端的未处理消息;
根据所述未处理消息从消息队列中被读取的次数,以及再处理时间,对所述未处理消息进行处理。
本申请实施例的计算机存储介质,可以采用一个或多个计算机可读的存储介质的任意组合。计算机可读存储介质可以是计算机可读信号存储介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的设备、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请实施例中,计算机可读存储介质可以是任何包含或存储程序的有形存储介质,该程序可以被指令执行设备、装置或者器件使用或者与其结合使用。
计算机可读的信号存储介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号存储介质还可以是计算机可读存储介质以外的任何计算机可读存储介质,该计算机可读存储介质可以发送、传播或者传输用于由指令执行设备、装置或者器件使用或者与其结合使用的程序。
计算机可读存储介质上包含的程序代码可以用任何适当的存储介质传输,包括——但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本申请操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或设备上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
注意,上述仅为本申请的较佳实施例及所运用技术原理。本领域技术人员会理解,本申请不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本申请的保护范围。因此,虽然通过以上实施例对本申请进行了较为详细的说明,但是本申请不仅仅限于以上实施例,在不脱离本申请构思的情况下,还可以包括更多其他等效实施例,而本申请的范围由所附的权利要求范围决定。
Claims (16)
1.一种消息处理方法,其特征在于,由服务端执行,所述方法包括:
读取未处理列表中的未处理消息;其中,所述未处理消息为未被第一消费客户端成功处理的消息;
将所述未处理消息的处理对象变更为第二消费客户端;
控制所述第二消费客户端根据所述未处理消息从消息队列中被读取的次数,以及再处理时间,对所述未处理消息进行处理。
2.根据权利要求1所述的方法,其特征在于,将所述未处理消息的处理对象变更为第二消费客户端之前,所述方法还包括:
针对消费客户端组,记录消费客户端组中的第一消费客户端从消息队列中读取的目标消息,生成未处理列表;
若接收到所述第一消费客户端发送的针对任一目标消息的成功处理确认通知,则将该目标消息从所述未处理列表中删除。
3.根据权利要求1所述的方法,其特征在于,将所述未处理消息的处理对象变更为第二消费客户端,包括:
根据所述未处理消息从消息队列中被读取时刻到当前时刻的持续时长,或第一消费客户端针对所述未处理消息发送的通知消息,将所述未处理消息的处理对象变更为第二消费客户端。
4.根据权利要求3所述的方法,其特征在于,根据所述未处理消息从消息队列中被读取时刻到当前时刻的持续时长,将所述未处理消息的处理对象变更为第二消费客户端,包括:
若所述未处理消息从消息队列中被读取时刻到当前时刻的持续时长达到预设时长,则将所述未处理消息的处理对象变更为第二消费客户端。
5.根据权利要求3所述的方法,其特征在于,根据第一消费客户端针对所述未处理消息发送的通知消息,将所述未处理消息的处理对象变更为第二消费客户端,包括:
若接收到第一消费客户端发送的针对未处理消息的消息错误通知,则将所述未处理消息的被读取的次数设置为预设限制次数;
将所述未处理消息的处理对象变更为第二消费客户端。
6.根据权利要求3所述的方法,其特征在于,根据第一消费客户端针对所述未处理消息发送的通知消息,将所述未处理消息的处理对象变更为第二消费客户端,包括:
若接收到第一消费客户端发送的针对未处理消息的处理失败通知,则将所述未处理消息的被读取的次数进行累加;
将所述未处理消息的处理对象变更为第二消费客户端。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
对消息队列中的消息存储于存储器中,进行持久化存储。
8.一种消息处理方法,其特征在于,由第二消费客户端执行,所述方法包括:
从未处理列表中读取处理对象为第二消费客户端的未处理消息;
根据所述未处理消息从消息队列中被读取的次数,以及再处理时间,对所述未处理消息进行处理。
9.根据权利要求8所述的方法,其特征在于,根据所述未处理消息从消息队列中被读取的次数,对所述未处理消息进行处理,包括:
若所述未处理消息从消息队列中被读取的次数超过预设限制次数,则将该未处理消息从消息队列中删除,并置于黑名单队列。
10.根据权利要求8所述的方法,其特征在于,根据所述未处理消息从消息队列中被读取的次数,以及再处理时间,对所述未处理消息进行处理,包括:
若所述未处理消息从消息队列中被读取的次数未超过预设限制次数,则确定再处理时间是否达到预设再处理时间;
若是,则将所述未处理消息从消息队列中删除,并将所述未处理消息重新插入消息队列,以被第一消费客户端重新读取。
11.根据权利要求10所述的方法,其特征在于,将所述未处理消息重新插入消息队列,包括:
为所述未处理消息定义新标识;
将存储被读取的次数的哈希表中的未处理消息对应的原标识,替换为新标识;
将具有新标识的未处理消息重新插入消息队列。
12.根据权利要求8-11中任一项所述的方法,其特征在于,所述方法还包括:
将所述未处理消息从未处理列表中删除。
13.一种消息处理装置,其特征在于,所述装置包括:
未处理消息读取模块,用于读取未处理列表中的未处理消息;其中,所述未处理消息为未被第一消费客户端成功处理的消息;
变更模块,用于将所述未处理消息的处理对象变更为第二消费客户端;
处理模块,用于控制所述第二消费客户端根据所述未处理消息从消息队列中被读取的次数,以及再处理时间,对所述未处理消息进行处理。
14.一种消息处理装置,其特征在于,所述装置包括:
消息读取模块,用于从未处理列表中读取处理对象为第二消费客户端的未处理消息;
消息处理模块,用于根据所述未处理消息从消息队列中被读取的次数,以及再处理时间,对所述未处理消息进行处理。
15.一种电子设备,其特征在于,所述电子设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一项所述的由服务端执行的消息处理方法,或者实现如权利要求8-12中任一项所述的由第二消费客户端执行的消息处理方法。
16.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一项所述的由服务端执行的消息处理方法,或者实现如权利要求8-12中任一项所述的由第二消费客户端执行的消息处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011027584.3A CN112181737A (zh) | 2020-09-25 | 2020-09-25 | 消息处理方法、装置、电子设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011027584.3A CN112181737A (zh) | 2020-09-25 | 2020-09-25 | 消息处理方法、装置、电子设备及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112181737A true CN112181737A (zh) | 2021-01-05 |
Family
ID=73944541
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011027584.3A Pending CN112181737A (zh) | 2020-09-25 | 2020-09-25 | 消息处理方法、装置、电子设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112181737A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112954007A (zh) * | 2021-01-26 | 2021-06-11 | 深圳前海微众银行股份有限公司 | 消息传输方法、装置、设备及存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103457841A (zh) * | 2013-09-17 | 2013-12-18 | 北京京东尚科信息技术有限公司 | 一种基于长连接的消息处理方法和消息处理装置 |
CN105512244A (zh) * | 2015-11-30 | 2016-04-20 | 北京京东尚科信息技术有限公司 | 基于消息队列实现数据库事务处理的方法及装置 |
US9436532B1 (en) * | 2011-12-20 | 2016-09-06 | Emc Corporation | Method and system for implementing independent message queues by specific applications |
CN106250250A (zh) * | 2016-08-09 | 2016-12-21 | 广州唯品会信息科技有限公司 | 数据通信方法及装置 |
CN107688503A (zh) * | 2017-09-07 | 2018-02-13 | 北京奇艺世纪科技有限公司 | 一种基于ActiveMQ数据总线的消息处理方法、装置及电子设备 |
CN108848039A (zh) * | 2018-04-24 | 2018-11-20 | 平安科技(深圳)有限公司 | 服务器、消息分配的方法及存储介质 |
US20180375783A1 (en) * | 2017-06-27 | 2018-12-27 | Atlassian Pty Ltd | Retry handling in messaging queues |
CN110719318A (zh) * | 2019-09-06 | 2020-01-21 | 上海陆家嘴国际金融资产交易市场股份有限公司 | 消息处理方法和系统 |
CN111090532A (zh) * | 2019-12-13 | 2020-05-01 | 深圳前海环融联易信息科技服务有限公司 | 应用服务的调用方法、其装置、电子设备及计算机存储介质 |
-
2020
- 2020-09-25 CN CN202011027584.3A patent/CN112181737A/zh active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9436532B1 (en) * | 2011-12-20 | 2016-09-06 | Emc Corporation | Method and system for implementing independent message queues by specific applications |
CN103457841A (zh) * | 2013-09-17 | 2013-12-18 | 北京京东尚科信息技术有限公司 | 一种基于长连接的消息处理方法和消息处理装置 |
CN105512244A (zh) * | 2015-11-30 | 2016-04-20 | 北京京东尚科信息技术有限公司 | 基于消息队列实现数据库事务处理的方法及装置 |
CN106250250A (zh) * | 2016-08-09 | 2016-12-21 | 广州唯品会信息科技有限公司 | 数据通信方法及装置 |
US20180375783A1 (en) * | 2017-06-27 | 2018-12-27 | Atlassian Pty Ltd | Retry handling in messaging queues |
CN107688503A (zh) * | 2017-09-07 | 2018-02-13 | 北京奇艺世纪科技有限公司 | 一种基于ActiveMQ数据总线的消息处理方法、装置及电子设备 |
CN108848039A (zh) * | 2018-04-24 | 2018-11-20 | 平安科技(深圳)有限公司 | 服务器、消息分配的方法及存储介质 |
CN110719318A (zh) * | 2019-09-06 | 2020-01-21 | 上海陆家嘴国际金融资产交易市场股份有限公司 | 消息处理方法和系统 |
CN111090532A (zh) * | 2019-12-13 | 2020-05-01 | 深圳前海环融联易信息科技服务有限公司 | 应用服务的调用方法、其装置、电子设备及计算机存储介质 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112954007A (zh) * | 2021-01-26 | 2021-06-11 | 深圳前海微众银行股份有限公司 | 消息传输方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9917913B2 (en) | Large message support for a publish-subscribe messaging system | |
CN108848039B (zh) | 服务器、消息分配的方法及存储介质 | |
CN107341062B (zh) | 一种数据推送方法、装置、设备以及存储介质 | |
CN110737534A (zh) | 任务的处理方法、装置和服务器 | |
CN110008041B (zh) | 一种消息处理方法及装置 | |
CN113452774B (zh) | 消息推送方法、装置、设备及存储介质 | |
US20150254117A1 (en) | Apparatus and method for executing agent | |
CN111475759A (zh) | 一种消息推送平台、方法、装置、服务器和存储介质 | |
CN110851276A (zh) | 一种业务请求处理方法、装置、服务器和存储介质 | |
CN113791917A (zh) | 延迟消息处理方法、装置与系统 | |
CN114840354A (zh) | 实现进程间高效处理数据请求的方法及系统 | |
CN110740145A (zh) | 消息消费方法、装置、存储介质及电子设备 | |
CN111282263A (zh) | 事件消息的处理方法、装置、电子设备及可读存储介质 | |
CN112181737A (zh) | 消息处理方法、装置、电子设备及介质 | |
CN108241616B (zh) | 消息推送方法和装置 | |
CN112181645A (zh) | 一种资源调度的方法、装置、设备及存储介质 | |
CN111581059A (zh) | 一种Spark应用监控方法、系统、设备和存储介质 | |
CN109032821B (zh) | 自动驾驶主题消息处理方法、装置、设备及存储介质 | |
US20230393782A1 (en) | Io request pipeline processing device, method and system, and storage medium | |
CN111405015B (zh) | 一种数据处理方法、装置、设备及存储介质 | |
CN114820218A (zh) | 内容操作方法、装置、服务器及存储介质 | |
CN111240810B (zh) | 一种事务管理方法、装置、设备和存储介质 | |
CN108874560B (zh) | 进行通信的方法和通信设备 | |
CN112328423A (zh) | 一种搜索服务漏洞的处理方法、装置和存储介质 | |
CN110798398A (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 |