CN115757494A - 消息处理方法、装置、设备及存储介质 - Google Patents
消息处理方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN115757494A CN115757494A CN202211449776.2A CN202211449776A CN115757494A CN 115757494 A CN115757494 A CN 115757494A CN 202211449776 A CN202211449776 A CN 202211449776A CN 115757494 A CN115757494 A CN 115757494A
- Authority
- CN
- China
- Prior art keywords
- message
- target
- identifier
- consumer
- read
- 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
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本申请公开了一种消息处理方法、装置、设备及存储介质,涉及计算机技术领域,可以提高消费者对同一任务的执行次数,从而可以提高任务执行成功的几率,改善用户的使用体验。该方法包括:在接收到目标消费者的第一读取指令的情况下,基于第一读取指令从消息队列中确定目标消息;生成目标消息的标识符,并将目标消息和标识符的对应关系缓存至历史消息记录中;向目标消费者返回第一读取信息;第一读取信息中包含标识符和目标消息,用于指示目标消费者读取并执行目标消息中的消息内容,并在执行失败的情况下发起第二读取指令;第二读取指令,至少携带有标识符,用于重新获取目标消息,且读取并执行。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种消息处理方法、装置、设备及存储介质。
背景技术
微服务架构是目前常用的分布式架构,微服务架构可以拆分为多个相对独立的服务,拆分后的服务之间可以以轻量级的通信机制来进行交互。现有的,微服务架构中的生产者和消费者之间不直接通讯,生产者生产出消息后,可以将生产的消息以消息队列的形式存入远程字典服务(Remote Dictionary Server,Redis)数据库,消费者不用从生产者处获取消息,而是从消息队列中依次获取。
然而,现有的微服务架构中,会多次出现消费者在执行与获取的消息对应的任务时,任务执行失败的情况,影响用户的使用体验。
发明内容
本申请提供一种消息处理方法、装置、设备及存储介质,可以提高消费者对同一任务的执行次数,从而可以提高任务执行成功的几率,改善用户的使用体验。
为达到上述目的,本申请采用如下技术方案:
第一方面,本申请提供一种消息处理方法,包括:在接收到目标消费者的第一读取指令的情况下,基于第一读取指令从消息队列中确定目标消息;生成目标消息的标识符,并将目标消息和标识符的对应关系缓存至历史消息记录中;向目标消费者返回第一读取信息;第一读取信息中包含标识符和目标消息,用于指示目标消费者读取并执行目标消息中的消息内容,并在执行失败的情况下发起第二读取指令;第二读取指令,至少携带有标识符,用于重新获取目标消息,且读取并执行。
本申请提供的技术方案中,在接收到目标消费者的第一读取指令时,不直接将确定出的目标消息返回给目标消费者,而是先生成该目标消息的标识符,并将该目标消息与标识符的对应关系缓存至历史消息记录中。之后,再将包含标识符和目标消息的第一读取信息返回给目标消费者。这样,当目标消费者首次读取并执行目标消息中的消息内容后,若执行失败,可以基于第一读取信息中的标识符重新发起第二读取指令,以重新获取目标消息且读取并执行。可以看出,本申请对目标消费者的任务执行过程设置了补偿机制,通过为目标消息生成标识符,且将目标消息与标识符的对应关系存储在历史消息记录中,可以便于目标消费者在任务执行失败时重新获取目标消息并执行任务,这样,可以提高消费者对同一任务的执行次数,从而可以提高任务执行成功的几率,改善用户的使用体验。
可选的,在一种可能的设计方式中,上述“向目标消费者返回第一读取信息”之后,还可以包括:
在接收到目标消费者的第二读取指令的情况下,基于标识符从历史消息记录中查找目标消息;
向目标消费者返回第二读取信息;第二读取信息中至少包含目标消息,用于指示目标消费者再次读取并执行目标消息中的消息内容。
可选的,在另一种可能的设计方式中,第二读取信息还用于指示目标消费者在二次执行失败的情况下,返回失败反馈信息;上述“向目标消费者返回第二读取信息”之后,还可以包括:
在接收到目标消费者返回的失败反馈信息的情况下,基于失败反馈信息中携带的标识符,从历史消息记录中查找对应的目标消息;
向目标消息对应的目标生产者返回目标消息,用于指示目标生产者对目标消息进行回滚操作。
可选的,在另一种可能的设计方式中,标识符包含标志位,标志位用于表征目标消息的被执行次数,标志位的初始值为预设值;上述“基于标识符从历史消息记录中查找目标消息”可以包括:
确定标志位是否满足预设条件;在确定标志位满足预设条件的情况下,基于标识符从历史消息记录中查找目标消息;
向目标消费者返回第二读取信息,包括:对标志位进行更新,并根据更新后的标志位对历史消息记录中的标识符进行更新,且向目标消费者返回第二读取信息;第二读取信息还包括更新后的标识符,还用于指示目标消费者在执行失败的情况下再次发起第二读取指令。
可选的,在另一种可能的设计方式中,确定标志位是否满足预设条件之后,还可以包括:
在确定标志位不满足预设条件的情况下,向目标消息对应的目标生产者返回目标消息,用于指示目标生产者对目标消息进行回滚操作。
可选的,在另一种可能的设计方式中,向目标消息对应的目标生产者返回目标消息之后,本申请提供的消息处理方法还可以包括:
删除缓存至历史消息记录中的目标消息和标识符的对应关系。
可选的,在另一种可能的设计方式中,标识符中还包括目标消息的执行状态;第一读取信息还用于指示目标消费者在执行成功的情况下,返回成功反馈信息;本申请提供的消息处理方法还可以包括:
在接收到目标消费者返回的成功反馈信息的情况下,更新执行状态。
第二方面,本申请提供一种消息处理装置,包括:确定模块、缓存模块以及返回模块;
确定模块,用于在接收到目标消费者的第一读取指令的情况下,基于第一读取指令从消息队列中确定目标消息;
缓存模块,用于生成目标消息的标识符,并将目标消息和标识符的对应关系缓存至历史消息记录中;
返回模块,用于向目标消费者返回第一读取信息;第一读取信息中包含标识符和目标消息,用于指示目标消费者读取并执行目标消息中的消息内容,并在执行失败的情况下发起第二读取指令;第二读取指令,至少携带有标识符,用于重新获取目标消息,且读取并执行。
可选的,在一种可能的设计方式中,本申请提供的消息处理装置还可以包括:查找模块;
查找模块,用于在返回模块向目标消费者返回第一读取信息之后,在接收到目标消费者的第二读取指令的情况下,基于标识符从历史消息记录中查找目标消息;
返回模块,还用于向目标消费者返回第二读取信息;第二读取信息中至少包含目标消息,用于指示目标消费者再次读取并执行目标消息中的消息内容。
可选的,在另一种可能的设计方式中,第二读取信息还用于指示目标消费者在二次执行失败的情况下,返回失败反馈信息;
查找模块,还用于在返回模块向目标消费者返回第二读取信息之后,在接收到目标消费者返回的失败反馈信息的情况下,基于失败反馈信息中携带的标识符,从历史消息记录中查找对应的目标消息;
返回模块,还用于向目标消息对应的目标生产者返回目标消息,用于指示目标生产者对目标消息进行回滚操作。
可选的,在另一种可能的设计方式中,标识符包含标志位,标志位用于表征目标消息的被执行次数,标志位的初始值为预设值;
查找模块具体用于:确定标志位是否满足预设条件;在确定标志位满足预设条件的情况下,基于标识符从历史消息记录中查找目标消息;
返回模块具体用于:对标志位进行更新,并根据更新后的标志位对历史消息记录中的标识符进行更新,且向目标消费者返回第二读取信息;第二读取信息还包括更新后的标识符,还用于指示目标消费者在执行失败的情况下再次发起第二读取指令。
可选的,在另一种可能的设计方式中,返回模块还用于:
在查找模块确定标志位是否满足预设条件之后,若确定标志位不满足预设条件,则向目标消息对应的目标生产者返回目标消息,用于指示目标生产者对目标消息进行回滚操作。
可选的,在另一种可能的设计方式中,本申请提供的消息处理装置还可以包括删除模块;
删除模块,用于在返回模块向目标消息对应的目标生产者返回目标消息之后,删除缓存至历史消息记录中的目标消息和标识符的对应关系。
可选的,在另一种可能的设计方式中,标识符中还包括目标消息的执行状态;第一读取信息还用于指示目标消费者在执行成功的情况下,返回成功反馈信息;本申请提供的消息处理装置还可以包括更新模块;
更新模块,用于在接收到目标消费者返回的成功反馈信息的情况下,更新执行状态。
第三方面,本申请提供一种消息处理设备,包括存储器、处理器、总线和通信接口;存储器用于存储计算机执行指令,处理器与存储器通过总线连接;当消息处理设备运行时,处理器执行存储器存储的计算机执行指令,以使消息处理设备执行如上述第一方面提供的消息处理方法。
第四方面,本申请提供一种计算机可读存储介质,计算机可读存储介质中存储有指令,当计算机执行指令时,使得计算机执行如第一方面提供的消息处理方法。
第五方面,本申请提供一种计算机程序产品,该计算机程序产品包括计算机指令,当计算机指令在计算机上运行时,使得计算机执行如第一方面提供的消息处理方法。
需要说明的是,上述计算机指令可以全部或者部分存储在计算机可读存储介质上。其中,计算机可读存储介质可以与消息处理设备的处理器封装在一起的,也可以与消息处理设备的处理器单独封装,本申请对此不做限定。
本申请中第二方面、第三方面、第四方面以及第五方面的描述,可以参考第一方面的详细描述;并且,第二方面、第三方面、第四方面以及第五方面的描述的有益效果,可以参考第一方面的有益效果分析,此处不再赘述。
在本申请中,对于上述涉及到的设备或功能模块的名称不构成限定,在实际实现中,这些设备或功能模块可以以其他名称出现。只要各个设备或功能模块的功能和本申请类似,均属于本申请权利要求及其等同技术的范围之内。
本申请的这些方面或其他方面在以下的描述中会更加简明易懂。
附图说明
图1为本申请实施例提供的一种消息处理方法的流程示意图;
图2为本申请实施例提供的一种消息队列的队列排布示意图;
图3为本申请实施例提供的另一种消息处理方法的流程示意图;
图4为本申请实施例提供的又一种消息处理方法的流程示意图;
图5为本申请实施例提供的一种消息处理装置的结构示意图;
图6为本申请实施例提供的一种消息处理设备的结构示意图。
具体实施方式
下面结合附图对本申请实施例提供的消息处理方法、装置、设备及存储介质进行详细地描述。
本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。
本申请的说明书以及附图中的术语“第一”和“第二”等是用于区别不同的对象,或者用于区别对同一对象的不同处理,而不是用于描述对象的特定顺序。
此外,本申请的描述中所提到的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选的还包括其他没有列出的步骤或单元,或可选的还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
需要说明的是,本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
在本申请的描述中,除非另有说明,“多个”的含义是指两个或两个以上。
另外,本申请技术方案中对数据的获取、存储、使用、处理等均符合国家法律法规的相关规定。
现有的,微服务架构中的生产者和消费者之间不直接通讯,生产者生产出消息后,可以将生产的消息以消息队列的形式存入Redis数据库,消费者不用从生产者处获取消息,而是从消息队列中依次获取。然而,现有的微服务架构中,会多次出现消费者在执行与获取的消息对应的任务时,任务执行失败的情况,影响用户的使用体验。
针对上述现有技术中存在的问题,本申请实施例提供了一种消息处理方法,该方法对目标消费者的任务执行过程设置了补偿机制,通过为目标消息生成标识符,且将目标消息与标识符的对应关系存储在历史消息记录中,可以便于目标消费者在任务执行失败时重新获取目标消息并执行任务,这样,可以提高消费者对同一任务的执行次数,从而可以提高任务执行成功的几率,改善用户的使用体验。
本申请实施例提供的消息处理方法,可以由本申请实施例提供的消息处理装置来执行,该装置可以通过软件和/或硬件的方式实现,并集成在执行本方法的消息处理设备中。示例性的,本申请实施例中的消息处理设备可以是Redis数据库的服务器或服务器集群(本申请实施例的以下描述中,简称为Redis)。
下面结合附图对本申请实施例提供的消息处理方法进行说明。
参照图1,本申请实施例提供的消息处理方法包括S101-S103:
S101、在接收到目标消费者的第一读取指令的情况下,基于第一读取指令从消息队列中确定目标消息。
其中,第一读取指令是目标消费者发起的消息读取指令。
本申请实施例提供的消息处理方法可以适用于包含Redis、多个消费者和多个生产者的消息处理系统。其中,Redis中包含有多个消息队列,不同的生产者可以将生产的消息添加到不同的消息队列中,消费者可以基于第一读取指令从消息队列中获取目标消息。
可选的,本申请实施例中,可以支持多个不同的消费者从同一消息队列中获取目标消息,这样,可以满足多播场景的业务需求。示例性的,当某个生产者对应的服务端系统中产生了一笔缴费业务后,需要通过消费者A对应的客户端系统进行缴费业务的日志记录,同时还需要通过另一个消费者B对应的客户端系统向用户发送消息通知。此情况下,该生产者在产生缴费业务后,可以发起异步线程将缴费业务的消息添加至对应的消息队列中,消费者A可以从消息队列中获取缴费业务的消息并执行日志记录的任务,消费者B可以从消息队列中获取缴费业务的消息并执行发送消息通知的任务。
另外,为了便于Redis明确发起第一读取指令的对象,从而可以准确将目标消息返回对应的目标消费者,第一读取指令中可以携带有目标消费者的标识。
参照图2,本申请实施例还提供了一种消息队列的队列排布示意图。如图2所示,消息队列中包含有生产者生成的多条消息,比如可以包括消息1、消息2、消息3、消息4、消息5、消息6以及消息7。这些消息按照生成顺序依次插入消息队列中,Redis可以为这些消息自动生成唯一的消息编号。示例性的,消息编号可以是时间戳序列,比如消息编号可以是1624346990322-2,表示该条消息是在毫秒时间戳1624346990322时产生,并且是该毫秒内产生的第二条消息,Redis生成消息编号时,后生成的消息编号要大于之前生成的消息编号。
第一读取指令中还可以包含目标消费者上一次发起第一读取指令后获取到的消息的消息编号,这样,Redis可以根据第一读取指令中的消息编号确定目标消费者上一次处理到哪条消息,从而确定出当前待处理的目标消息。比如,第一读取指令中的消息编号为图2中消息3的消息编号,那么Redis可以确定消息3已经被读取过了,当前待处理的目标消息应该是消息4,也即是可以将消息4返回给消费者,由其进行读取并执行消息4中的消息内容。
S102、生成目标消息的标识符,并将目标消息和标识符的对应关系缓存至历史消息记录中。
示例性的,标识符可以是Redis按照事先确定的规则为目标消息生成的唯一标识。
S103、向目标消费者返回第一读取信息。
其中,第一读取信息中包含标识符和目标消息,用于指示目标消费者读取并执行目标消息中的消息内容,并在执行失败的情况下发起第二读取指令;目标消费者发起的第二读取指令中至少可以携带有标识符,目标消费者发起的该第二读取指令可以用于重新获取目标消息,且读取并执行。
可选的,向目标消费者返回第一读取信息之后,本申请实施例提供的消息处理方法还可以包括:在接收到目标消费者的第二读取指令的情况下,基于标识符从历史消息记录中查找目标消息;向目标消费者返回第二读取信息。
其中,第二读取信息中至少包含目标消息,用于指示目标消费者再次读取并执行目标消息中的消息内容。
Redis向目标消费者返回包含标识符和目标消息的第一读取信息后,可以对应删除消息队列中的目标消息。目标消费者获取到目标消息后,可以将目标消息添加至自己的待执行队列中,按顺序进行消息的读取和执行。目标消费者在读取和执行待执行队列中的消息时,可以在处理一条消息的同时对应删除该条消息。这样,若由于网络临时故障等原因导致任务执行失败,没有容错机制,整个消息处理系统的可靠性较差。所以,本申请实施例中,在返回第一读取信息前可以先将目标消息和标识符的对应关系缓存至历史消息记录中,这样,目标消费者在执行失败的情况下可以发起第二读取指令,重新从历史消息记录中获取到目标消息,且读取并执行。因此,本申请实施例可以提高整个消息处理系统的可靠性。
可选的,第二读取信息还用于指示目标消费者在二次执行失败的情况下,返回失败反馈信息;向目标消费者返回第二读取信息之后,本申请实施例提供的消息处理方法还可以包括:在接收到目标消费者返回的失败反馈信息的情况下,基于失败反馈信息中携带的标识符,从历史消息记录中查找对应的目标消息;向目标消息对应的目标生产者返回目标消息,用于指示目标生产者对目标消息进行回滚操作。
本申请实施例中,目标消费者在对目标消息的消息内容两次执行失败的情况下,可以返回失败反馈信息,Redis可以从基于该失败反馈信息,向目标消息对应的目标生产者返回目标消息。目标生产者可以对目标消息进行回滚操作,比如可以撤回之前产生的业务操作。这样,可以保证任务执行失败时,生产者对应的服务端系统与消费者对应的客户端系统的数据的一致性。
可选的,标识符包含标志位,标志位用于表征目标消息的被执行次数,标志位的初始值为预设值;基于标识符从历史消息记录中查找目标消息可以包括:确定标志位是否满足预设条件;在确定标志位满足预设条件的情况下,基于标识符从历史消息记录中查找目标消息;向目标消费者返回第二读取信息,可以包括:对标志位进行更新,并根据更新后的标志位对历史消息记录中的标识符进行更新,且向目标消费者返回第二读取信息。
第二读取信息还包括更新后的标识符,还用于指示目标消费者在执行失败的情况下再次发起第二读取指令。
其中,预设值可以是事先确定的数值,比如,预设值可以是1。
预设条件可以是事先确定的条件,比如,预设条件可以是标志位的当前数值小于或等于预设阈值。
预设阈值可以是事先确定的数值,比如,预设阈值可以是3或者4。
示例性的,对标志位进行更新,也即是在标志位的当前数值上执行加一操作。比如,标志位的当前数值为初始值1,那么对标志位进行更新也即是将标志位的当前数值置为2。
本申请实施例中,可以通过在标识符中添加标志位来表示该条目标消息当前已被执行的次数,当接收到目标消费者的第二读取指令时,可以对比第二读取指令中的标识符的标志位的数值是否达到事先设置的预设阈值,该预设阈值可以表示允许对同一任务的最大执行次数。若标志位的数值没有达到预设阈值,则可以从历史消息队列中查找到目标消息并返回给目标消费者,使得目标消费者可以再次读取并执行目标消息的消息内容。这样,可以进一步提高消费者对同一任务的执行次数。
可选的,确定标志位是否满足预设条件之后,本申请实施例提供的消息处理方法还可以包括:在确定标志位不满足预设条件的情况下,向目标消息对应的目标生产者返回目标消息,用于指示目标生产者对目标消息进行回滚操作。
在目标消费者多次执行任务失败的情况下,为了保证生产者对应的服务端系统与消费者对应的客户端系统的数据的一致性,本申请实施例可以在第二读取指令中的标识符的标志位的数值达到预设阈值时,向目标消息对应的目标生产者返回目标消息,使得目标生产者可以对目标消息进行回滚操作。
可选的,向目标消息对应的目标生产者返回目标消息之后,本申请实施例提供的消息处理方法还可以包括:删除缓存至历史消息记录中的目标消息和标识符的对应关系。
在目标消息的消息内容多次执行失败的情况下,该条目标消息可以被认定为一条坏消息。为了避免历史消息记录中的坏消息过多,影响Redis基于标识符查询目标消息的效率,本申请实施例可以对这些坏消息进行删除。
可选的,标识符中还包括目标消息的执行状态;第一读取信息还用于指示目标消费者在执行成功的情况下,返回成功反馈信息;本申请实施例提供的消息处理方法还可以包括:在接收到目标消费者返回的成功反馈信息的情况下,更新执行状态。
示例性的,目标消息的执行状态可以包括未执行状态,已读取状态,执行成功状态及执行失败状态等。
本申请实施例中,可以在标识符中添加目标消息的执行状态,并且可以根据实际的执行过程对该执行状态进行更新。这样,客户端系统或服务端系统可以随时在前端异步任务查询界面中查询所有的消息和执行状态,以实现对消息的监控及数据分析。
综合以上描述,本申请实施例提供的消息处理方法中,在接收到目标消费者的第一读取指令时,不直接将确定出的目标消息返回给目标消费者,而是先生成该目标消息的标识符,并将该目标消息与标识符的对应关系缓存至历史消息记录中。之后,再将包含标识符和目标消息的第一读取信息返回给目标消费者。这样,当目标消费者首次读取并执行目标消息中的消息内容后,若执行失败,可以基于第一读取信息中的标识符重新发起第二读取指令,以重新获取目标消息且读取并执行。可以看出,本申请对目标消费者的任务执行过程设置了补偿机制,通过为目标消息生成标识符,且将目标消息与标识符的对应关系存储在历史消息记录中,可以便于目标消费者在任务执行失败时重新获取目标消息并执行任务,这样,可以提高消费者对同一任务的执行次数,从而可以提高任务执行成功的几率,改善用户的使用体验。
可选的,如图3所示,本申请实施例还提供了一种消息处理方法,该方法可以包括S301-S307:
S301、在接收到目标消费者的第一读取指令的情况下,基于第一读取指令从消息队列中确定目标消息。
S302、生成目标消息的标识符,并将目标消息和标识符的对应关系缓存至历史消息记录中。
S303、向目标消费者返回第一读取信息。
S304、在接收到目标消费者的第二读取指令的情况下,基于标识符从历史消息记录中查找目标消息。
S305、向目标消费者返回第二读取信息。
S306、在接收到目标消费者返回的失败反馈信息的情况下,基于失败反馈信息中携带的标识符,从历史消息记录中查找对应的目标消息。
S307、向目标消息对应的目标生产者返回目标消息,用于指示目标生产者对目标消息进行回滚操作。
可选的,如图4所示,本申请实施例还提供了一种消息处理方法,该方法可以包括S401-S407:
S401、在接收到目标消费者的第一读取指令的情况下,基于第一读取指令从消息队列中确定目标消息。
S402、生成目标消息的标识符,并将目标消息和标识符的对应关系缓存至历史消息记录中。
S403、向目标消费者返回第一读取信息。
S404、在接收到目标消费者的第二读取指令的情况下,确定标志位是否满足预设条件。
若确定标志位满足预设条件,则执行步骤S405;若确定标志位不满足预设条件,则执行步骤S407;
S405、基于标识符从历史消息记录中查找目标消息。
S406、对标志位进行更新,并根据更新后的标志位对历史消息记录中的标识符进行更新,且向目标消费者返回第二读取信息。
S407、向目标消息对应的目标生产者返回目标消息,用于指示目标生产者对目标消息进行回滚操作。
如图5所示,本申请实施例还提供了一种消息处理装置,该装置可以包括:确定模块11、缓存模块21以及返回模块31。
其中,确定模块11执行上述方法实施例中的S101,缓存模块21执行上述方法实施例中的S102,返回模块31执行上述方法实施例中的S103。
确定模块11,用于在接收到目标消费者的第一读取指令的情况下,基于第一读取指令从消息队列中确定目标消息;
缓存模块21,用于生成目标消息的标识符,并将目标消息和标识符的对应关系缓存至历史消息记录中;
返回模块31,用于向目标消费者返回第一读取信息;第一读取信息中包含标识符和目标消息,用于指示目标消费者读取并执行目标消息中的消息内容,并在执行失败的情况下发起第二读取指令;第二读取指令,至少携带有标识符,用于重新获取目标消息,且读取并执行。
可选的,在一种可能的设计方式中,本申请提供的消息处理装置还可以包括:查找模块;
查找模块,用于在返回模块31向目标消费者返回第一读取信息之后,在接收到目标消费者的第二读取指令的情况下,基于标识符从历史消息记录中查找目标消息;
返回模块31,还用于向目标消费者返回第二读取信息;第二读取信息中至少包含目标消息,用于指示目标消费者再次读取并执行目标消息中的消息内容。
可选的,在另一种可能的设计方式中,第二读取信息还用于指示目标消费者在二次执行失败的情况下,返回失败反馈信息;
查找模块,还用于在返回模块31向目标消费者返回第二读取信息之后,在接收到目标消费者返回的失败反馈信息的情况下,基于失败反馈信息中携带的标识符,从历史消息记录中查找对应的目标消息;
返回模块31,还用于向目标消息对应的目标生产者返回目标消息,用于指示目标生产者对目标消息进行回滚操作。
可选的,在另一种可能的设计方式中,标识符包含标志位,标志位用于表征目标消息的被执行次数,标志位的初始值为预设值;
查找模块具体用于:确定标志位是否满足预设条件;在确定标志位满足预设条件的情况下,基于标识符从历史消息记录中查找目标消息;
返回模块31具体用于:对标志位进行更新,并根据更新后的标志位对历史消息记录中的标识符进行更新,且向目标消费者返回第二读取信息;第二读取信息还包括更新后的标识符,还用于指示目标消费者在执行失败的情况下再次发起第二读取指令。
可选的,在另一种可能的设计方式中,返回模块31还用于:
在查找模块确定标志位是否满足预设条件之后,若确定标志位不满足预设条件,则向目标消息对应的目标生产者返回目标消息,用于指示目标生产者对目标消息进行回滚操作。
可选的,在另一种可能的设计方式中,本申请提供的消息处理装置还可以包括删除模块;
删除模块,用于在返回模块31向目标消息对应的目标生产者返回目标消息之后,删除缓存至历史消息记录中的目标消息和标识符的对应关系。
可选的,在另一种可能的设计方式中,标识符中还包括目标消息的执行状态;第一读取信息还用于指示目标消费者在执行成功的情况下,返回成功反馈信息;本申请提供的消息处理装置还可以包括更新模块;
更新模块,用于在接收到目标消费者返回的成功反馈信息的情况下,更新执行状态。
可选的,消息处理装置还可以包括存储模块,存储模块用于存储该消息处理装置的程序代码等。
如图6所示,本申请实施例还提供一种消息处理设备,包括存储器41、处理器(比如图6中的42-1和42-2)、总线43和通信接口44;存储器41用于存储计算机执行指令,处理器与存储器41通过总线43连接;当消息处理设备运行时,处理器执行存储器41存储的计算机执行指令,以使消息处理设备执行如上述实施例提供的消息处理方法。
在具体的实现中,作为一种实施例,处理器可以包括一个或多个中央处理器(central processing unit,CPU),例如图6中所示的CPU0和CPU1。且作为一种实施例,消息处理设备可以包括多个处理器,例如图6中所示的处理器42-1和处理器42-2。这些处理器中的每一个CPU可以是一个单核处理器(single-CPU),也可以是一个多核处理器(multi-CPU)。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。
存储器41可以是只读存储器41(read-only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electrically erasable programmable read-only memory,EEPROM)、只读光盘(compactdisc read-only memory,CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器41可以是独立存在,通过总线43与处理器相连接。存储器41也可以和处理器集成在一起。
在具体的实现中,存储器41,用于存储本申请中的数据和执行本申请的软件程序对应的计算机执行指令。处理器可以通过运行或执行存储在存储器41内的软件程序,以及调用存储在存储器41内的数据,消息处理设备的各种功能。
通信接口44,使用任何收发器一类的设备,用于与其他设备或通信网络通信,如控制系统、无线接入网(radio access network,RAN),无线局域网(wireless local areanetworks,WLAN)等。通信接口44可以包括接收单元实现接收功能,以及发送单元实现发送功能。
总线43,可以是工业标准体系结构(industry standard architecture,ISA)总线、外部设备互连(peripheral component interconnect,PCI)总线或扩展工业标准体系结构(extended industry standard architecture,EISA)总线等。该总线43可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
作为一个示例,结合图5,消息处理装置中的返回模块实现的功能与图6中发送单元实现的功能相同,消息处理装置中的缓存模块实现的功能与图6中的处理器实现的功能相同。当消息处理装置包括有存储模块时,存储模块实现的功能与图6中的存储器实现的功能相同。
本实施例中相关内容的解释可参考上述方法实施例,此处不再赘述。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,设备和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质中存储有指令,当计算机执行该指令时,使得计算机执行上述实施例提供的消息处理方法。
其中,计算机可读存储介质,例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、RAM、ROM、可擦式可编程只读存储器(erasable programmable read only memory,EPROM)、寄存器、硬盘、光纤、CD-ROM、光存储器件、磁存储器件、或者上述的任意合适的组合、或者本领域熟知的任何其它形式的计算机可读存储介质。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于特定用途集成电路(application specificintegrated circuit,ASIC)中。在本申请实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应该以权利要求的保护范围为准。
Claims (10)
1.一种消息处理方法,其特征在于,包括:
在接收到目标消费者的第一读取指令的情况下,基于所述第一读取指令从消息队列中确定目标消息;
生成所述目标消息的标识符,并将所述目标消息和所述标识符的对应关系缓存至历史消息记录中;
向所述目标消费者返回第一读取信息;所述第一读取信息中包含所述标识符和所述目标消息,用于指示所述目标消费者读取并执行所述目标消息中的消息内容,并在执行失败的情况下发起第二读取指令;所述第二读取指令,至少携带有所述标识符,用于重新获取所述目标消息,且读取并执行。
2.根据权利要求1所述的消息处理方法,其特征在于,所述向所述目标消费者返回第一读取信息之后,所述方法还包括:
在接收到所述目标消费者的第二读取指令的情况下,基于所述标识符从所述历史消息记录中查找所述目标消息;
向所述目标消费者返回第二读取信息;所述第二读取信息中至少包含所述目标消息,用于指示所述目标消费者再次读取并执行所述目标消息中的消息内容。
3.根据权利要求2所述的消息处理方法,其特征在于,所述第二读取信息还用于指示所述目标消费者在二次执行失败的情况下,返回失败反馈信息;所述向所述目标消费者返回第二读取信息之后,所述方法还包括:
在接收到所述目标消费者返回的所述失败反馈信息的情况下,基于所述失败反馈信息中携带的所述标识符,从所述历史消息记录中查找对应的所述目标消息;
向所述目标消息对应的目标生产者返回所述目标消息,用于指示所述目标生产者对所述目标消息进行回滚操作。
4.根据权利要求2所述的消息处理方法,其特征在于,所述标识符包含标志位,所述标志位用于表征所述目标消息的被执行次数,所述标志位的初始值为预设值;所述基于所述标识符从所述历史消息记录中查找所述目标消息,包括:
确定所述标志位是否满足预设条件;在确定所述标志位满足所述预设条件的情况下,基于所述标识符从所述历史消息记录中查找所述目标消息;
所述向所述目标消费者返回第二读取信息,包括:对所述标志位进行更新,并根据更新后的标志位对所述历史消息记录中的所述标识符进行更新,且向所述目标消费者返回所述第二读取信息;所述第二读取信息还包括更新后的标识符,还用于指示所述目标消费者在执行失败的情况下再次发起所述第二读取指令。
5.根据权利要求4所述的消息处理方法,其特征在于,所述确定所述标志位是否满足预设条件之后,所述方法还包括:
在确定所述标志位不满足所述预设条件的情况下,向所述目标消息对应的目标生产者返回所述目标消息,用于指示所述目标生产者对所述目标消息进行回滚操作。
6.根据权利要求3或5所述的消息处理方法,其特征在于,所述向所述目标消息对应的目标生产者返回所述目标消息之后,所述方法还包括:
删除缓存至所述历史消息记录中的所述目标消息和所述标识符的对应关系。
7.根据权利要求1所述的消息处理方法,其特征在于,所述标识符中还包括所述目标消息的执行状态;所述第一读取信息还用于指示所述目标消费者在执行成功的情况下,返回成功反馈信息;所述方法还包括:
在接收到所述目标消费者返回的所述成功反馈信息的情况下,更新所述执行状态。
8.一种消息处理装置,其特征在于,包括:
确定模块,用于在接收到目标消费者的第一读取指令的情况下,基于所述第一读取指令从消息队列中确定目标消息;
缓存模块,用于生成所述目标消息的标识符,并将所述目标消息和所述标识符的对应关系缓存至历史消息记录中;
返回模块,用于向所述目标消费者返回第一读取信息;所述第一读取信息中包含所述标识符和所述目标消息,用于指示所述目标消费者读取并执行所述目标消息中的消息内容,并在执行失败的情况下发起第二读取指令;所述第二读取指令,至少携带有所述标识符,用于重新获取所述目标消息,且读取并执行。
9.一种消息处理设备,其特征在于,包括存储器、处理器、总线和通信接口;所述存储器用于存储计算机执行指令,所述处理器与所述存储器通过所述总线连接;
当所述消息处理设备运行时,处理器执行所述存储器存储的所述计算机执行指令,以使所述消息处理设备执行如权利要求1-7任意一项所述的消息处理方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当计算机执行所述指令时,使得所述计算机执行如权利要求1-7任意一项所述的消息处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211449776.2A CN115757494A (zh) | 2022-11-18 | 2022-11-18 | 消息处理方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211449776.2A CN115757494A (zh) | 2022-11-18 | 2022-11-18 | 消息处理方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115757494A true CN115757494A (zh) | 2023-03-07 |
Family
ID=85373657
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211449776.2A Pending CN115757494A (zh) | 2022-11-18 | 2022-11-18 | 消息处理方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115757494A (zh) |
-
2022
- 2022-11-18 CN CN202211449776.2A patent/CN115757494A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107798108B (zh) | 一种异步任务查询方法及设备 | |
CN110096336B (zh) | 数据监控方法、装置、设备和介质 | |
CN106991008B (zh) | 一种资源锁管理方法、相关设备及系统 | |
CN111858586B (zh) | 一种数据处理的方法和装置 | |
CN106339267A (zh) | 一种对象查询方法及服务端 | |
CN111885184A (zh) | 高并发场景下热点访问关键字处理方法和装置 | |
CN110618999A (zh) | 数据的查询方法及装置、计算机存储介质、电子设备 | |
CN112835885B (zh) | 一种分布式表格存储的处理方法、装置及系统 | |
CN115145806A (zh) | 一种数据采集方法、装置、以及计算机可读存储介质 | |
CN115114042A (zh) | 存储数据访问方法、装置、电子设备和存储介质 | |
CN110287049B (zh) | 数据处理方法、装置和存储介质 | |
CN110609707B (zh) | 在线数据处理系统生成方法、装置及设备 | |
CN115757494A (zh) | 消息处理方法、装置、设备及存储介质 | |
CN113672669B (zh) | 基于分布式存储的数据查询方法及装置 | |
CN115550380A (zh) | 数据同步方法、装置、设备及存储介质 | |
CN114238404A (zh) | 数据的查询方法、装置、存储介质及设备 | |
CN113468579A (zh) | 数据访问方法、装置、设备和存储介质 | |
JP2014524210A (ja) | 可変長ノンスの生成 | |
CN112528339A (zh) | 一种基于Caché数据库的数据脱敏方法及电子设备 | |
CN113032820A (zh) | 文件存储方法、访问方法、装置、设备及存储介质 | |
CN118245503B (zh) | 存储过程的执行方法、装置、电子设备及可读存储介质 | |
CN108737330B (zh) | 社交行为数据的处理方法、装置以及存储介质 | |
CN118502985A (zh) | 一种基于统一管理平台的子应用数据获取方法及装置 | |
CN116431573A (zh) | 一种跨集群的文件读取方法及装置 | |
CN117560396A (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 |