CN113064740A - 一种消息处理方法和装置 - Google Patents
一种消息处理方法和装置 Download PDFInfo
- Publication number
- CN113064740A CN113064740A CN202110363448.XA CN202110363448A CN113064740A CN 113064740 A CN113064740 A CN 113064740A CN 202110363448 A CN202110363448 A CN 202110363448A CN 113064740 A CN113064740 A CN 113064740A
- Authority
- CN
- China
- Prior art keywords
- message
- task
- processed
- message processing
- timers
- 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
Images
Classifications
-
- 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/542—Event management; Broadcasting; Multicasting; Notifications
-
- 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/541—Client-server
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种消息处理方法和装置,涉及计算机技术领域。该方法的具体实施方式包括:接收业务端发送的一个或多个待处理消息;针对每一个所述待处理消息:根据所述待处理消息以及多个定时器,构建所述待处理消息对应的多个消息处理时间分别对应的多个第一任务;所述多个定时器分别指示了所述多个消息处理时间;根据所述消息处理时间,执行所述第一任务,以将所述第一任务的处理结果发送给订阅端。该实施方式能够保证数据一致性,确保消息发送成功,且独立于业务端,降低与业务端的耦合性,扩展性及适应性极强,可应用于各种场景,提升用户体验。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种消息处理方法和装置。
背景技术
在消息传递场景下,会涉及到多方的后端交互。例如,对于支付订单来说,接收待支付订单的第一后端需监控订单的支付情况,当超时未支付时,向服务提供者对应的第二后端发送取消订单的消息,或者订单支付成功后向第二后端发送支付成功的消息。
现有技术中,上述消息可能存在发送失败的情况。例如,第一后端在将订单支付成功后的消息通知给第三后端时,可能存在多次发送仍然失败的情况,这可能导致订单无法按时完成。
发明内容
有鉴于此,本发明实施例提供一种消息处理方法和装置,能够保证数据一致性,确保消息发送成功,且独立于业务端,降低与业务端的耦合性,扩展性及适应性极强,可应用于各种场景,提升用户体验。
进一步地,使得业务端可以专注于自身业务逻辑开发,提高其开发效率,并且可实现消息存储、通知状态记录、重试策略、事件重演、报警等辅助功能。
更进一步地,支持跨平台、跨语言的调用和HTTP、JSF等协议的调用,灵活性较强。
为实现上述目的,根据本发明实施例的一个方面,提供了一种消息处理方法,包括:
接收业务端发送的一个或多个待处理消息;
针对每一个所述待处理消息:
根据所述待处理消息以及多个定时器,构建所述待处理消息对应的多个消息处理时间分别对应的多个第一任务;所述多个定时器分别指示了所述多个消息处理时间;
根据所述消息处理时间,执行所述第一任务,以将所述第一任务的处理结果发送给订阅端。
可选地,所述根据所述消息处理时间,执行所述第一任务,将所述第一任务的处理结果发送给订阅端,包括:
针对所述多个第一任务,执行:
A:确定所述多个消息处理时间中距离当前时间最近的目标消息处理时间;
当所述定时器记录的时间指示达到所述目标消息处理时间时,执行与所述目标消息处理时间对应的目标任务;
响应于所述订阅端对所述目标任务的负反馈,执行步骤A;响应于所述订阅端对所述目标任务的正反馈,确定所述消息处理成功。
可选地,通过MQ集群接收所述待处理消息;
通过kafka集群的第一线程,根据所述待处理消息,分别生成所述一个或多个待处理消息分别对应的一个或多个第二任务,并将所述一个或多个第二任务存储至第一队列;
通过所述kafka集群的第二线程,根据预设周期,从所述第一队列中提取所述第二任务,并生成提取的所述第二任务对应的多个第一任务。
可选地,还包括:
预先配置多组定时器,每一组定时器包括多个定时器,且不同组的定时器分别对应的起始时间不同;
所述生成提取的所述第二任务对应的多个第一任务,包括:
根据所述第二任务所对应的待处理消息的类型,确定所述第二任务对应的定时器组;
根据确定出的所述定时器组中的多个定时器,生成所述第二任务对应的多个第一任务。
可选地,还包括:
接收业务端发送的当前消息;
确定所述第一任务和所述第二任务中,是否存在与所述当前消息对应同一标识的目标任务;
如果是,删除所述目标任务,并生成所述当前消息对应的第二任务。
可选地,还包括:
响应于所述订阅端对所述多个第一任务中的最后一个目标任务的负反馈,将所述待处理消息存储至第二队列;
当所述第二队列中的消息总数量大于预设阈值时,向所述业务端发送关于处理失败的消息。
可选地,还包括:
响应于所述业务端发送的关于重新执行所述待处理消息的消息,从所述第二队列中提取所述待处理消息,并根据所述待处理消息以及多个定时器,构建多个第一任务。
可选地,当所述多个定时器中存在指示同一消息处理时间的至少两个定时器时,
针对同一消息处理时间对应的所述至少两个定时器设置锁,使得同一消息处理时间下,所述至少两个定时器分别对应的至少两个第一任务中,仅有一个第一任务被执行。
可选地,所述被执行的第一任务为定时器正常运行的任务。
根据本发明实施例的再一个方面,提供了一种消息处理装置,包括:
接收模块,用于接收业务端发送的一个或多个待处理消息;
任务构建模块,用于针对每一个所述待处理消息:
根据所述待处理消息以及多个定时器,构建所述待处理消息对应的多个消息处理时间分别对应的多个第一任务;所述多个定时器分别指示了所述多个消息处理时间;
任务执行模块,用于根据所述消息处理时间,执行所述第一任务,以将所述第一任务的处理结果发送给订阅端。
根据本发明实施例的另一个方面,提供了一种消息处理系统,包括:
业务端、消息处理端和订阅端;
所述业务端向所述消息处理端发送一个或多个待处理消息;
所述消息处理端接收到所述一个或多个待处理消息后,针对每一个所述待处理消息:
根据所述待处理消息以及多个定时器,构建所述待处理消息对应的多个消息处理时间分别对应的多个第一任务;所述多个定时器分别指示了所述多个消息处理时间;
所述消息处理端还根据所述消息处理时间,执行所述第一任务,以将所述第一任务的处理结果发送给所述订阅端。
根据本发明实施例的再一个方面,提供了一种消息处理电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明提供的消息处理方法。
根据本发明实施例的还一个方面,提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明提供的消息处理方法。
上述发明中的一个实施例具有如下优点或有益效果:因为采用基于MQ集群、kafka构架和redis队列组合构建独立的消息处理系统的技术手段,所以克服了多方后端交互可能存在多次发送仍然失败,导致业务无法按时完成的技术问题,进而达到保证数据一致性,确保消息发送成功,且独立于业务端,降低与业务端的耦合性,扩展性及适应性极强,可应用于各种场景,提升用户体验的技术效果。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是适于应用于本发明实施例的消息处理方法或消息处理装置的示例性系统架构图;
图2是根据本发明实施例的消息处理方法的主要流程的示意图;
图3是根据本发明实施例的消息处理装置的主要模块的示意图;
图4(a)是根据本发明实施例的消息处理系统的示意图一;
图4(b)是根据本发明实施例的消息处理系统的示意图二;
图5是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1示出了适于应用于本发明实施例的消息处理方法或消息处理装置的示例性系统架构图,如图1所示,本发明实施例的消息处理方法或消息处理装置的示例性系统架构包括:
如图1所示,系统架构100可以包括第一服务器101,第二服务器102,第三服务器103、104、105和网络106。网络106用以在第一服务器101和第二服务器102之间、第一服务器101和第三服务器103、104、105之间提供通信链路的介质。网络106可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
第一服务器101接收第二服务器102发送的待处理消息,并根据待处理消息构建任务,将任务发送至第三服务器103、104、105,使得第三服务器103、104、105执行所述任务。
第一服务器101可以是提供各种服务的服务器,例如对第二服务器102发送的待处理消息进行处理提供支持的后台管理服务器。后台管理服务器可以对接收到的待处理消息请求等数据进行分析等处理,并将处理结果(例如第三服务器103、104、105是否处理成功)反馈给第二服务器102。
需要说明的是,本发明实施例所提供的消息处理方法一般由服务器101执行,相应地,消息处理装置一般设置于服务器101中。
应该理解,图1中的第一服务器、第二服务器、第三服务器和网络的数目仅仅是示意性的。根据实现需要,可以具有任意数目的第一服务器、第二服务器、第三服务器和网络。
图2是根据本发明实施例的消息处理方法的主要流程的示意图,如图2所示,本发明的消息处理方法包括:
步骤S201,接收业务端发送的一个或多个待处理消息。
在多方后端交互的场景中,例如,努力交付场景,订阅端接收业务端发出的取消订单的消息,并返回订单是否取消成功的结果;或者,订阅端接收业务端发出的通知支付结果的消息,并返回是否通知成功的结果,但是,消息可能存在多次发送仍然失败的情况。为了获得努力交付场景下消息处理时的数据一致性,保证消息发送成功,可以通过本发明的消息处理方法,通过MQ集群接收业务端发送的一个或多个待处理消息,并建立执行任务,使得订阅端可以接收任务的处理结果,并对负反馈的处理结果使用重试机制,保证消息发送成功。MQ集群可以异步处理,实现流量缓冲,平衡后续流程处理的压力。
步骤S202,针对每一个所述待处理消息:根据所述待处理消息以及多个定时器,构建所述待处理消息对应的多个消息处理时间分别对应的多个第一任务;所述多个定时器分别指示了所述多个消息处理时间。
接收到业务端发送的一个或多个待处理消息后,针对每一个待处理消息设置多个定时器,每一个定时器对应一个消息处理时间,多个定时器分别指示了多个消息处理时间。根据每一个待处理消息及其对应的多个消息处理时间,构建与接收到的每一个待处理消息对应的多个第一任务;其中,每一个第一任务包括待处理消息及其对应的消息处理时间。
具体包括:
本发明的消息处理方法基于kafka架构,因此,在构建第一任务时,通过kafka集群的第一线程,根据接收到的业务端发送的一个或多个待处理消息,生成分别与一个或多个待处理消息对应的一个或多个第二任务,并将一个或多个第二任务存储至第一队列;其中,每一个待处理消息可以包括一个第二任务,也可以包括多个第二任务。
通过kafka集群的第二线程,预先配置多组定时器,每一组定时器包括多个定时器,且不同组的定时器分别对应的起始时间不同。根据预先配置的多组定时器,每隔预设周期,从第一队列中提取第二任务;其中,第二任务对应的待处理消息的执行时间晚于当前时间。
根据第二任务所对应的待处理消息的类型,确定第二任务对应的定时器组;其中,待处理消息的类型可以包括立即执行、定期执行或者延时执行等类型,相应地,立即执行的待处理消息对应的定时器组的起始时间可以是当前时间,定期执行的待处理消息对应的定时器组可以包括多个起始时间,延时执行的待处理消息对应的定时器组的起始时间可以是大于当前时间的某个时间。
根据第二任务、确定出的与第二任务对应的定时器组中的多个消息处理时间,生成与第二任务对应的多个第一任务。
示例性地,同一消息处理时间可以包括多个相同的第一任务,每一个第一任务对应一个定时器,针对同一消息处理时间的多个相同的第一任务的多个定时器设置分布锁,使得在同一消息处理时间下,多个相同的第一任务中仅有一个第一任务被执行,被执行的第一任务为定时器正常运行的任务。
示例性地,为了保证消息发送结果的准确性,防止重复处理带来的资源浪费及有可能的结果冲突,在接收到业务端发送的当前消息后,扫描第一任务和第二任务,判断其中是否存在与当前消息对应同一业务标识的目标任务,如果是,删除目标任务,并生成当前消息对应的第二任务,或者,向业务端反馈发布冲突的结果,使得业务端确定如何进行下一步操作等;如果否,生成与当前消息对应的一个或多个第二任务,并将一个或多个第二任务存储至第一队列。
步骤S203,根据所述消息处理时间,执行所述第一任务,以将所述第一任务的处理结果发送给订阅端。
根据多个第一任务分别对应的消息处理时间,通过kafka集群的第二线程,执行第一任务,并将第一任务的处理结果发送给订阅与多个第一任务对应的待处理消息的订阅端。
具体包括:
针对构建的多个第一任务,确定多个消息处理时间中距离当前时间最近的目标消息处理时间;当定时器记录的时间指示达到目标消息处理时间时,执行与目标消息处理时间对应的目标任务,并将任务的处理结果发送给订阅了与目标任务对应的待处理消息的订阅端。接收订阅端的反馈结果,如果订阅端对目标任务的反馈结果为负反馈(比如:失败/超时),将与目标消息处理时间距离最近的消息处理时间作为目标消息处理时间,继续执行;如果订阅端对目标任务的反馈结果为正反馈(比如:成功),确定消息处理成功。
如果接收到的订阅者反馈的与待处理消息对应的多个第一任务中的最后一个目标任务的反馈结果为负反馈,将与多个第一任务对应的待处理消息存储至第二队列,kafka集群的第二线程定期扫描第二队列,当第二队列中的消息总数量大于第二预设长度时,向业务端发送关于处理失败的消息,接收业务端发送的关于重新执行所述待处理消息的消息,从第二队列中提取所述待处理消息,并通过kafka集群的第一线程,重新生成所述待处理消息对应的一个或多个第二任务;或者,接收业务端发送的关于删除所述待处理消息的消息,将所述待处理消息从第二队列中删除。
在本发明实施例中,通过接收业务端发送的一个或多个待处理消息;针对每一个所述待处理消息:根据所述待处理消息以及多个定时器,构建所述待处理消息对应的多个消息处理时间分别对应的多个第一任务;根据所述消息处理时间,执行所述第一任务,将所述第一任务的处理结果发送给订阅端等步骤,能够保证数据一致性,确保消息发送成功,且独立于业务端,降低与业务端的耦合性,扩展性及适应性极强,可应用于各种场景,提升用户体验。
图3是根据本发明实施例的消息处理装置的主要模块的示意图,如图3所示,本发明的消息处理装置300包括:
接收模块301,用于接收业务端发送的一个或多个待处理消息。
为了获得努力交付场景下消息处理时的数据一致性,保证消息发送成功,可以通过本发明的消息处理方法,所述接收模块301通过MQ集群接收业务端发送的一个或多个待处理消息,并建立执行任务,使得订阅端可以接收任务的处理结果,并对负反馈的处理结果使用重试机制,保证消息发送成功。MQ集群可以异步处理,实现流量缓冲,平衡后续流程处理的压力。
任务构建模块302,用于针对每一个所述待处理消息:根据所述待处理消息以及多个定时器,构建所述待处理消息对应的多个消息处理时间分别对应的多个第一任务;所述多个定时器分别指示了所述多个消息处理时间。
所述接收模块301接收到业务端发送的一个或多个待处理消息后,针对每一个待处理消息设置多个定时器,每一个定时器对应一个消息处理时间,多个定时器分别指示了多个消息处理时间。所述任务构建模块302根据每一个待处理消息及其对应的多个消息处理时间,构建与接收到的每一个待处理消息对应的多个第一任务;其中,每一个第一任务包括待处理消息及其对应的消息处理时间。
任务处理模块303,用于根据所述消息处理时间,执行所述第一任务,以将所述第一任务的处理结果发送给订阅端。
所述任务处理模块303根据多个第一任务分别对应的消息处理时间,通过kafka集群的第二线程,执行第一任务,并将第一任务的处理结果发送给订阅与多个第一任务对应的待处理消息的订阅端。
在本发明实施例中,通过接收模块、任务构建模块和任务处理模块等模块,能够保证数据一致性,确保消息发送成功,且独立于业务端,降低与业务端的耦合性,扩展性及适应性极强,可应用于各种场景,提升用户体验。
图4(a)是根据本发明实施例的消息处理系统的示意图一,图4(b)是根据本发明实施例的消息处理系统的示意图二,如图4(a)、(b)所示,本发明的消息处理系统包括:
业务端、消息处理端和订阅端,通过本发明的基于MQ集群、kafka集群和redis队列组合的消息处理方法,可以保证消息发送成功。
业务端向消息处理端申请接入token,配置订阅端的回调地址,重试策略、消费QPS((Query Per Second),用于衡量服务性能的指标,计算一个特定的查询服务器在规定时间内所处理流量的多少,公式为QPS=并发量/平均响应时间)等,通过publish服务向消息处理端上报待处理消息的数据。
消息处理端在接收业务端发送的一个或多个待处理消息时,通过kafka集群第一线程中的broker根据订阅端订阅的消息主题,对与订阅端订阅的消息主题对应的一个或多个待处理消息进行监听,一个或多个producer接收一个或多个待处理消息,并同步发送至MQ集群,成功后向业务端返回发布成功状态。MQ集群是一个消息中间件,可以用于异步处理,实现与业务端的解耦,使得业务端可以专注于自身逻辑业务开发,只要发出待处理消息即可,MQ集群接收到待处理消息后进行异步处理,实现流量削峰的作用,缓冲瞬时或者巨大流量的冲击,减少存储中间件的写入压力。
MQ集群接收到一个或多个待处理消息,削峰后通过push模式或者其它任意模式将一个或多个待处理消息推送至kafka集群的message bucket,message bucket选用mongodb存储中间件,将一个或多个待处理消息按照业务标识分别保存为一个或多个第二任务,比如,业务标识可以为b1、b2、bn等;业务标识及其对应的待处理消息可以根据需要进行预先设置,比如,业务标识b001为支付,业务标识b002为发送短信,每一个待处理消息对应一个独立的集合。利用mongodb存储自动分区的特性,支持大数据量存储,并且,后期可以将存储中间件切换成任意存储。
通过kafka集群第二线程中的consumer通过其中的timer定时扫描messagebucket中的第二任务,并从第二任务中抽取执行时间(execTime)在当前时间之后的预设时间段的一个或者多个第二任务;timer抽取第二任务后,为一个或者多个第二任务设定多个定时器,并根据第二任务和多个定时器构建多个第一任务,第一任务表征在定时器指示的消息处理时间处理消息,比如,第一任务的任务标识可以为b1_timer_1、b1_timer_2、b1_timer_n、b2_timer_1、b2_timer_n等;其中,每一个第二任务在同一时间下设置多个定时器,比如,相应的第一任务的任务标识可以为b1_timer_1_1、b1_timer_1_2、b1_timer_1_n等,以防止单一定时器的单点故障问题,导致该时间处理失败,并设置分布式锁lock,用以保证同一时间只有一个定时器起作用/执行。
在构建第一任务后,timer将多个第一任务放入第一队列中,并记录本次扫描的offset(比如,业务标识+时间戳);其中,第一队列可以是基于redis的list服务的readyqueue,用于存放处于准备阶段的消息;每个待处理消息对应一个redis队列,每个队列启动独立的redis客户端进行监听,比如,ready queue中的任务标识可以为b1_queue、b2_queue等,ready queue中的多个第一任务在其定时器时间到达时出队,创建异步消费线程执行第一任务,并将第一任务的执行结果通知订阅端。timer通过扫描message bucket抽取待处理消息之前,需要检测第一队列的队列长度是否超过第一预设长度,如果是,则返回等待下次扫描;如果否,则抽取待处理消息。
在异步消费线程执行第一任务时,根据第一任务的任务标识,查询订阅对应任务标识的一个或多个订阅端的回调地址,并调用通知服务,根据订阅端的回调地址将第一任务的执行结果通知订阅端;其中,向一个或多个订阅端发送通知时可以通过redis的incr服务进行限流,进一步保证通知的正常发送。
接收订阅端的反馈结果,如果反馈结果为正返回,则调用日志服务进行记录,根据待处理消息的业务标识删除mongodb中对应的待处理消息的集合数据;如果反馈结果为负反馈,则调用日志服务进行记录,递增待处理消息的重试次数,并判断重试次数是否超出预设重试次数,如果是,将待处理消息存储至第二队列,其中,第二队列可以是私信队列;如果否,更新mongodb中所述待处理消息的重试次数、重试时间并进行保存,使得consumer可以重新抽取所述待处理消息。
将反馈结果为负反馈的待处理消息存储至第二队列后,consumer定时扫描第二队列,判断第二队列的长度是否超过第二预设长度,如果是,触发报警服务向业务端报警,使得业务端可以选择重推与第二队列对应的待处理消息,进一步确保消息发送成功,保证数据一致性;或者,使得业务端可以选择删除并重新发送与第二队列对应的待处理消息,进一步确保消息发送成功,保证数据一致性。
在本发明实施例中,通过消息处理系统,能够保证数据一致性,确保消息发送成功,且独立于业务端,降低与业务端的耦合性,扩展性及适应性极强,可应用于各种场景,提升用户体验。
图5是适于用来实现本发明实施例的终端设备的计算机系统的结构示意图,如图5所示,本发明实施例的终端设备的计算机系统500包括:
中央处理单元(CPU)501,其可以根据存储在只读存储器(ROM)502中的程序或者从存储部分508加载到随机访问存储器(RAM)503中的程序而执行各种适当的动作和处理。在RAM503中,还存储有系统500操作所需的各种程序和数据。CPU501、ROM502以及RAM503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
以下部件连接至I/O接口505:包括键盘、鼠标等的输入部分506;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分507;包括硬盘等的存储部分508;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分509。通信部分509经由诸如因特网的网络执行通信处理。驱动器510也根据需要连接至I/O接口505。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装入存储部分508。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分509从网络上被下载和安装,和/或从可拆卸介质511被安装。在该计算机程序被中央处理单元(CPU)501执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括接收模块、任务构建模块和任务执行模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,接收模块还可以被描述为“接收业务端发送的待处理消息的模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:接收业务端发送的一个或多个待处理消息;针对每一个所述待处理消息:根据所述待处理消息以及多个定时器,构建所述待处理消息对应的多个消息处理时间分别对应的多个第一任务;所述多个定时器分别指示了所述多个消息处理时间;根据所述消息处理时间,执行所述第一任务,以将所述第一任务的处理结果发送给订阅端。
根据本发明实施例的技术方案,能够保证数据一致性,确保消息发送成功,且独立于业务端,降低与业务端的耦合性,扩展性及适应性极强,可应用于各种场景,提升用户体验。
进一步地,使得业务端可以专注于自身业务逻辑开发,提高其开发效率,并且可实现消息存储、通知状态记录、重试策略、事件重演、报警等辅助功能。
更进一步地,支持跨平台、跨语言的调用和HTTP、JSF等协议的调用,灵活性较强。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (13)
1.一种消息处理方法,其特征在于,包括:
接收业务端发送的一个或多个待处理消息;
针对每一个所述待处理消息:
根据所述待处理消息以及多个定时器,构建所述待处理消息对应的多个消息处理时间分别对应的多个第一任务;所述多个定时器分别指示了所述多个消息处理时间;
根据所述消息处理时间,执行所述第一任务,以将所述第一任务的处理结果发送给订阅端。
2.根据权利要求1所述的方法,其特征在于,所述根据所述消息处理时间,执行所述第一任务,将所述第一任务的处理结果发送给订阅端,包括:
针对所述多个第一任务,执行:
A:确定所述多个消息处理时间中距离当前时间最近的目标消息处理时间;
当所述定时器记录的时间指示达到所述目标消息处理时间时,执行与所述目标消息处理时间对应的目标任务;
响应于所述订阅端对所述目标任务的负反馈,执行步骤A;响应于所述订阅端对所述目标任务的正反馈,确定所述消息处理成功。
3.根据权利要求1所述的方法,其特征在于,
通过MQ集群接收所述待处理消息;
通过kafka集群的第一线程,根据所述待处理消息,分别生成所述一个或多个待处理消息分别对应的一个或多个第二任务,并将所述一个或多个第二任务存储至第一队列;
通过所述kafka集群的第二线程,根据预设周期,从所述第一队列中提取所述第二任务,并生成提取的所述第二任务对应的多个第一任务。
4.根据权利要求3所述的方法,其特征在于,还包括:
预先配置多组定时器,每一组定时器包括多个定时器,且不同组的定时器分别对应的起始时间不同;
所述生成提取的所述第二任务对应的多个第一任务,包括:
根据所述第二任务所对应的待处理消息的类型,确定所述第二任务对应的定时器组;
根据确定出的所述定时器组中的多个定时器,生成所述第二任务对应的多个第一任务。
5.根据权利要求3所述的方法,其特征在于,还包括:
接收业务端发送的当前消息;
确定所述第一任务和所述第二任务中,是否存在与所述当前消息对应同一标识的目标任务;
如果是,删除所述目标任务,并生成所述当前消息对应的第二任务。
6.根据权利要求2所述的方法,其特征在于,还包括:
响应于所述订阅端对所述多个第一任务中的最后一个目标任务的负反馈,将所述待处理消息存储至第二队列;
当所述第二队列中的消息总数量大于预设阈值时,向所述业务端发送关于处理失败的消息。
7.根据权利要求6所述的方法,其特征在于,还包括:
响应于所述业务端发送的关于重新执行所述待处理消息的消息,从所述第二队列中提取所述待处理消息,并根据所述待处理消息以及多个定时器,构建多个第一任务。
8.根据权利要求1所述的方法,其特征在于,当所述多个定时器中存在指示同一消息处理时间的至少两个定时器时,
针对同一消息处理时间对应的所述至少两个定时器设置锁,使得同一消息处理时间下,所述至少两个定时器分别对应的至少两个第一任务中,仅有一个第一任务被执行。
9.根据权利要求8所述的方法,其特征在于,
所述被执行的第一任务为定时器正常运行的任务。
10.一种消息处理装置,其特征在于,包括:
接收模块,用于接收业务端发送的一个或多个待处理消息;
任务构建模块,用于针对每一个所述待处理消息:
根据所述待处理消息以及多个定时器,构建所述待处理消息对应的多个消息处理时间分别对应的多个第一任务;所述多个定时器分别指示了所述多个消息处理时间;
任务执行模块,用于根据所述消息处理时间,执行所述第一任务,以将所述第一任务的处理结果发送给订阅端。
11.一种消息处理系统,其特征在于,包括:
业务端、消息处理端和订阅端;
所述业务端向所述消息处理端发送一个或多个待处理消息;
所述消息处理端接收到所述一个或多个待处理消息后,针对每一个所述待处理消息:
根据所述待处理消息以及多个定时器,构建所述待处理消息对应的多个消息处理时间分别对应的多个第一任务;所述多个定时器分别指示了所述多个消息处理时间;
所述消息处理端还根据所述消息处理时间,执行所述第一任务,以将所述第一任务的处理结果发送给所述订阅端。
12.一种消息处理电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-9中任一所述的方法。
13.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-9中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110363448.XA CN113064740A (zh) | 2021-04-02 | 2021-04-02 | 一种消息处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110363448.XA CN113064740A (zh) | 2021-04-02 | 2021-04-02 | 一种消息处理方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113064740A true CN113064740A (zh) | 2021-07-02 |
Family
ID=76565591
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110363448.XA Pending CN113064740A (zh) | 2021-04-02 | 2021-04-02 | 一种消息处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113064740A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113687934A (zh) * | 2021-09-09 | 2021-11-23 | 山东派盟网络科技有限公司 | 数据采集方法、任务调度方法、装置、设备、介质和程序 |
CN115048207A (zh) * | 2022-08-17 | 2022-09-13 | 恒丰银行股份有限公司 | 一种基于固定时间间隔的任务执行方法、设备及介质 |
-
2021
- 2021-04-02 CN CN202110363448.XA patent/CN113064740A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113687934A (zh) * | 2021-09-09 | 2021-11-23 | 山东派盟网络科技有限公司 | 数据采集方法、任务调度方法、装置、设备、介质和程序 |
CN115048207A (zh) * | 2022-08-17 | 2022-09-13 | 恒丰银行股份有限公司 | 一种基于固定时间间隔的任务执行方法、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108449410B (zh) | 一种云平台中消息管理方法、系统及相关装置 | |
CN108696374B (zh) | 更新客户端配置的方法和装置 | |
CN112527525B (zh) | 基于消息队列的分布式事件总线处理方法、终端及介质 | |
CN112860451A (zh) | 一种基于SaaS的多租户数据处理方法和装置 | |
CN111711697A (zh) | 消息推送方法、装置、设备及存储介质 | |
CN109905286B (zh) | 一种监控设备运行状态的方法和系统 | |
CN109936613B (zh) | 应用于服务器的容灾方法和装置 | |
CN109873863B (zh) | 服务的异步调用方法和装置 | |
CN113064740A (zh) | 一种消息处理方法和装置 | |
CN111478781B (zh) | 一种消息广播的方法和装置 | |
CN106789913B (zh) | 用户账号管理方法及装置 | |
CN112084042B (zh) | 一种消息处理的方法和装置 | |
CN111045837A (zh) | 跨服务消费的方法、存储介质 | |
CN110389976B (zh) | 一种多接口数据的调度方法和装置 | |
CN113742389A (zh) | 一种业务处理方法和装置 | |
CN112118352A (zh) | 通知触发消息的处理方法和装置 | |
CN116401034A (zh) | 任务执行方法、计算机设备及计算机存储介质 | |
CN111259032A (zh) | 一种业务处理方法和装置 | |
CN115525411A (zh) | 处理业务请求的方法、装置、电子设备和计算机可读介质 | |
CN113141236A (zh) | 一种报文处理方法和装置 | |
CN108471375B (zh) | 一种消息处理方法、装置及终端 | |
CN113296982B (zh) | 一种接口调用方法和装置 | |
CN110798398A (zh) | 群组消息管理方法、装置、设备和介质 | |
CN113766437B (zh) | 一种短信发送方法和装置 | |
US11968253B2 (en) | Request delivery device, request delivery method, and request delivery program |
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 |