CN113900842A - 消息的消费方法、装置、电子设备及计算机存储介质 - Google Patents
消息的消费方法、装置、电子设备及计算机存储介质 Download PDFInfo
- Publication number
- CN113900842A CN113900842A CN202111504670.3A CN202111504670A CN113900842A CN 113900842 A CN113900842 A CN 113900842A CN 202111504670 A CN202111504670 A CN 202111504670A CN 113900842 A CN113900842 A CN 113900842A
- Authority
- CN
- China
- Prior art keywords
- idempotent
- target message
- consumption
- data structure
- message
- 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.)
- Granted
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/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/38—Payment protocols; Details thereof
- G06Q20/386—Payment protocols; Details thereof using messaging services or messaging apps
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/38—Payment protocols; Details thereof
- G06Q20/40—Authorisation, e.g. identification of payer or payee, verification of customer or shop credentials; Review and approval of payers, e.g. check credit lines or negative lists
- G06Q20/401—Transaction verification
- G06Q20/4014—Identity check for transactions
-
- 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/547—Messaging middleware
-
- 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)
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Strategic Management (AREA)
- General Business, Economics & Management (AREA)
- Finance (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Information Transfer Between Computers (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请提供一种消息的消费方法、装置、电子设备及计算机存储介质,所述消息的消费方法包括:在获取目标消息时;其中,所述目标消息包括:幂等标识和身份证;首先,将所述目标消息的幂等标识作为关键字,将所述目标消息的身份证作为值,并为所述目标消息的身份证添加正在消费的消费状态,存储至数据结构服务器;然后,在预设时间内,判断所述数据结构服务器中是否有所述目标消息的幂等标识;若在预设时间内,判断出所述数据结构服务器中没有所述目标消息的幂等标识,则确定设置成功,进入消费流程;若消费成功则存储目标消息的幂等标识,并将所述目标消息的身份证的消费状态更改为已消费成功。从而可以去重,实现了幂等消费的逻辑。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种消息的消费方法、装置、电子设备及计算机存储介质。
背景技术
目前,当业务消费消息时,重复消息导致业务数据产生了异常,此时就需要业务支持幂等逻辑。比如某个消费消息进行计数的业务,重复的消息会导致额外的计数。
但是,RocketMQ本身是不支持幂等消费的,因此,业务消费消息时,重复消息导致业务数据产生了异常。
发明内容
有鉴于此,本申请提供一种消息的消费方法、装置、电子设备及计算机存储介质,可以在RocketMQ的客户端实现幂等方案,从而提高消息的消费效率。
本申请第一方面提供了一种消息的消费方法,包括:
获取目标消息;其中,所述目标消息包括:幂等标识和身份证;
将所述目标消息的幂等标识作为关键字,将所述目标消息的身份证作为值,并为所述目标消息的身份证添加正在消费的消费状态,存储至数据结构服务器;
在预设时间内,判断所述数据结构服务器中是否有所述目标消息的幂等标识;
若在预设时间内,判断出所述数据结构服务器中没有所述目标消息的幂等标识,则确定设置成功,进入消费流程;
若消费成功则存储目标消息的幂等标识,并将所述目标消息的身份证的消费状态更改为已消费成功。
可选的,所述消息的消费方法,还包括:
若在预设时间内,判断出所述数据结构服务器中有所述目标消息的幂等标识,则确定设置失败,获取所述数据结构服务器中的所述幂等标识对应的身份证和消费状态;
判断所述数据结构服务器中的所述幂等标识对应的身份证是否与所述目标消息的幂等标识对应的身份证一致,以及判断所述数据结构服务器中的所述幂等标识对应的消费状态是否为正在消费;
若判断出所述数据结构服务器中的所述幂等标识对应的身份证与所述目标消息的幂等标识对应的身份证一致,且所述数据结构服务器中的所述幂等标识对应的消费状态为正在消费,则进入延迟流程;
若判断出所述数据结构服务器中的所述幂等标识对应的身份证不与所述目标消息的幂等标识对应的身份证一致,和/或所述数据结构服务器中的所述幂等标识对应的消费状态不为正在消费,则对目标消息进行去重。
可选的,所述消息的消费方法,还包括:
若消费未成功,则存储目标消息的幂等标识,将所述目标消息的身份证的消费状态更改为未消费成功,并进入重试流程。
可选的,所述幂等标识为业务端自行设置或RocketMQ消息在客户端生成的标识。
本申请第二方面提供了一种消息的消费装置,包括:
获取单元,获取目标消息;其中,所述目标消息包括:幂等标识和身份证;
存储单元,用于将所述目标消息的幂等标识作为关键字,将所述目标消息的身份证作为值,并为所述目标消息的身份证添加正在消费的消费状态,存储至数据结构服务器;
第一判断单元,用于在预设时间内,判断所述数据结构服务器中是否有所述目标消息的幂等标识;
第一确定单元,用于若在预设时间内,所述第一判断单元判断出,所述数据结构服务器中没有所述目标消息的幂等标识,则确定设置成功,进入消费流程;
所述存储单元,还用于若消费成功则存储目标消息的幂等标识,并将所述目标消息的身份证的消费状态更改为已消费成功。
可选的,所述消息的消费装置,还包括:
第二确定单元,用于若在预设时间内,所述第一判断单元判断出,所述数据结构服务器中有所述目标消息的幂等标识,则确定设置失败,获取所述数据结构服务器中的所述幂等标识对应的身份证和消费状态;
第二判断单元,用于判断所述数据结构服务器中的所述幂等标识对应的身份证是否与所述目标消息的幂等标识对应的身份证一致,以及判断所述数据结构服务器中的所述幂等标识对应的消费状态是否为正在消费;
延迟单元,用于若所述第二判断单元判断出,所述数据结构服务器中的所述幂等标识对应的身份证与所述目标消息的幂等标识对应的身份证一致,且所述数据结构服务器中的所述幂等标识对应的消费状态为正在消费,则进入延迟流程;
去重单元,用于若所述第二判断单元判断出,所述数据结构服务器中的所述幂等标识对应的身份证不与所述目标消息的幂等标识对应的身份证一致,和/或所述数据结构服务器中的所述幂等标识对应的消费状态不为正在消费,则对目标消息进行去重。
可选的,所述消息的消费装置,还包括:
重试单元,用于若消费未成功,则存储目标消息的幂等标识,将所述目标消息的身份证的消费状态更改为未消费成功,并进入重试流程。
可选的,所述幂等标识为业务端自行设置或RocketMQ消息在客户端生成的标识。
本申请第三方面提供了一种电子设备,包括:
一个或多个处理器;
存储装置,其上存储有一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如第一方面任意一项所述的消息的消费方法。
本申请第四方面提供了一种计算机存储介质,其上存储有计算机程序,其中,所述计算机程序被处理器执行时实现如第一方面任意一项所述的消息的消费方法。
由以上方案可知,本申请提供一种消息的消费方法、装置、电子设备及计算机存储介质,所述消息的消费方法包括:在获取目标消息时;其中,所述目标消息包括:幂等标识和身份证;首先,将所述目标消息的幂等标识作为关键字,将所述目标消息的身份证作为值,并为所述目标消息的身份证添加正在消费的消费状态,存储至数据结构服务器;然后,在预设时间内,判断所述数据结构服务器中是否有所述目标消息的幂等标识;若在预设时间内,判断出所述数据结构服务器中没有所述目标消息的幂等标识,则确定设置成功,进入消费流程;若消费成功则存储目标消息的幂等标识,并将所述目标消息的身份证的消费状态更改为已消费成功。从而可以去重,实现了幂等消费的逻辑。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例提供的一种消息的消费方法的具体流程图;
图2为本申请另一实施例提供的一种消息的消费方法的流程图;
图3为本申请另一实施例提供的一种消息的消费方法的示意图;
图4为本申请另一实施例提供的一种消息的消费装置的示意图;
图5为本申请另一实施例提供的一种消息的消费装置的示意图;
图6为本申请另一实施例提供的一种实现消息的消费方法的电子设备的示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要注意,本申请中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系,而术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
首先,对本申请中出现的术语进行解释说明:
RocketMQ:阿里巴巴开源的分布式消息中间件。
生产者:往RocketMQ生产消息的客户端程序。
消费者:从RocketMQ消费消息的客户端程序。
幂等消费:重复消费同一条消息最后结果一样(本质为去重)。
jvm:java虚拟机。
MQCloud:搜狐开源的RocketMQ监控运维平台。
sdk:提供客户端的具有幂等消费的工具包。
Redis:一种基于内存的高速缓存数据库。
MessageID:RocketMQ消息在客户端生成的id,具有全局唯一性,可以理解为消息体的唯一标识,即MessageID相同的消息,其内容一定相同。
MID:RocketMQ消息在broker端生成的id,可以理解为消息的身份证,即MID相同的消息,肯定是同一条消息。
本申请实施例提供了一种消息的消费方法,可以将幂等逻辑埋在RocketMQ客户端sdk中,为RocketMQ提供了幂等消费的支持,如图1所示,具体包括以下步骤:
S101、获取目标消息。
其中,目标消息包括:幂等标识和身份证。
需要说明的是,幂等标识为业务端自行设置或RocketMQ消息在客户端生成的标识。其具备消息唯一性,例如订单号等。
若业务端未能提供幂等标识,那么可以选择在RocketMQ消息在客户端生成的Message id,其具有全局唯一性,组成如下:
Ip+pid+类加载器哈希+***时间戳+自增序号。
S102、将目标消息的幂等标识作为关键字,将目标消息的身份证作为值,并为目标消息的身份证添加正在消费的消费状态,存储至数据结构服务器。
其中,数据结构服务器可以是但不限于Redis,此处不做限定。
具体的,将目标消息的幂等标识作为关键字,将目标消息的身份证作为值,并为目标消息的身份证添加正在消费的消费状态,并形成关键字-值(key-value)结构。
在本申请的具体实现过程中,正在消费的消费状态可以用但不限于0来表示,那么本步骤再具体的实现过程中,就可以通过Redis指令:set id mid:0,来实现。其中,id表示目标消息的幂等标识,mid表示目标消息的身份证。
S103、在预设时间内,判断数据结构服务器中是否有目标消息的幂等标识。
其中,预设时间由技术人员或相关有权限的技术人员进行设置、更改,此处不做限定。
具体的,若在预设时间内,判断出数据结构服务器中没有目标消息的幂等标识,则执行步骤S104。
S104、确定设置成功,进入消费流程。
S105、若消费成功则存储目标消息的幂等标识,并将目标消息的身份证的消费状态更改为已消费成功。
在本申请的具体实现过程中,消费成功的消费状态可以用但不限于1来表示。
可选的,在本申请的另一实施例中,若在预设时间内,判断出数据结构服务器中有目标消息的幂等标识,消息的消费方法的一种实施方式,如图2所示,还包括:
S201、确定设置失败,获取数据结构服务器中的幂等标识对应的身份证和消费状态。
S202、判断数据结构服务器中的幂等标识对应的身份证是否与目标消息的幂等标识对应的身份证一致。
S203、判断数据结构服务器中的幂等标识对应的消费状态是否为正在消费。
需要说明的是,步骤S202与步骤S203没有固定的先后顺序,再具体的实现过程中,可以先执行步骤S202、也可以先执行步骤S203、也可以同时执行步骤S202和S203,此处不做限定。
具体的,若判断出数据结构服务器中的幂等标识对应的身份证与目标消息的幂等标识对应的身份证一致,且数据结构服务器中的幂等标识对应的消费状态为正在消费,则执行步骤S204;若判断出数据结构服务器中的幂等标识对应的身份证不与目标消息的幂等标识对应的身份证一致,和/或数据结构服务器中的幂等标识对应的消费状态不为正在消费,则执行步骤S205。
S204、进入延迟流程。
具体的,将目标消息发送至延迟队列,延迟队列中的消息会每隔预设时间(如10秒)重新推送至消费者进行消费。
S205、对目标消息进行去重。
可选的,在本申请的另一实施例中,若消费未成功,消息的消费方法的一种实施方式,包括:
存储目标消息的幂等标识,将目标消息的身份证的消费状态更改为未消费成功,并进入重试流程。
在本申请的具体实现过程中,消费未成功的消费状态可以用但不限于2来表示。
具体的,将目标消息发送至重试队列,当消息进入重试流程后,幂等消费逻辑不再生效,因为考虑到为了让消费者不丢失消息,所以重试消息不再走幂等消费流程。
如图3所示,为本申请实施例提供的消息的消费方法的示意图,①②流程是生产流程,③⑥流程是消费流程,④⑤流程是去重流程。
首先,对消息可能重复的情况进行介绍:
发送消息重复:
在①流程中,生产者发送消息到RocketMQ,由于网络等原因,导致②流程响应失败,此时,生产者如果进行重试发送,将会导致重复的消息。
消息重复投递:
在③流程中,当消费者拉取到消息,消费完毕后,由于网络等原因,导致⑥响应失败,此时,由于broker没有收到消费成功标识,故该消息可能被重复投递到其他消费者,导致重复消费。其中,broker是RocketMQ集群中的一个核心组件,主要用于存储消息。
负载均衡导致重复:
由于RocketMQ自身的机制,当broker更新、扩容等导致消费者重新平衡时,可能导致同一条消息被投递到不同的消费者,导致重复消费。
需要说明的是,实现幂等的关键是需要做到消息去重,即重复的消息不再消费,那么消费者自然就不受重复消费的影响了。如图3中的流程④⑤就是简化的去重流程。
要想做到消息去重,需要识别重复的消息,即选择某个属性作为消息的唯一标识,在消费前记录下消费的状态,就能够判断是否消费过该消息了。
本申请选择业务端自行设置或RocketMQ消息在客户端生成的标识作为幂等标识,当然还可以选择其他标识作为幂等标识,此处不做限定。
首先,消费者拉取消息到本地。
其次,通过Redis命令:set id mid:0 nx ex 300,保存消息的消费状态,该命令含义为:将id和mid:0存储为key,value结构到Redis中,nx指令说明当Redis中不存在该key时,设置成功;反之,存在该key时,设置失败;ex 300是300秒后该key过期。由于该指令是原子的,就保障了分布式情况下,幂等id只能被成功存储一次。其中,mid:0是存储到Redis中的值,mid用于标识消息身份证,0标识正在消费。
当设置成功时,表示第一次消费该消息,那么就进入后续的消费流程。最后,消费成功后,更新消费状态,结束整个流程。
重试流程是RocketMQ自身所支持的,即当消费失败时,消息被发送到重试队列,进行重试消费。当消息进入重试流程后,幂等消费逻辑不再生效,因为考虑到为了让消费者不丢失消息,重试消息不再走幂等消费流程。
延迟流程是为了解决下面这种情况:
在①正常流程中,消费者设置消息状态后,消费消息时如果异常退出而不能更新消费状态,那么此消息将没有被成功消费。当该消息被RocketMQ重新投递到其他消费者时,由于Redis中的消费状态一直是消费中,故无法确认其是否被消费成功了。
为了解决这个问题,在流程①中,设置消息消费状态时,携带了过期时间,ex 300,即300秒内,该消息支持去重;
流程③是在300秒内,发现该消息是消费中的状态,并且消息的mid相同(即肯定是同一条消息),那么该消息需要发送到延迟队列。
发到延迟队列的消息每延迟10秒会重新推送到消费者进行消费。
这个流程就保障了未被确认消费状态的消息,在其状态数据过期后,一定会被消费成功。
由以上方案可知,本申请提供一种消息的消费方法:在获取目标消息时;其中,目标消息包括:幂等标识和身份证;首先,将目标消息的幂等标识作为关键字,将目标消息的身份证作为值,并为目标消息的身份证添加正在消费的消费状态,存储至数据结构服务器;然后,在预设时间内,判断数据结构服务器中是否有目标消息的幂等标识;若在预设时间内,判断出数据结构服务器中没有目标消息的幂等标识,则确定设置成功,进入消费流程;若消费成功则存储目标消息的幂等标识,并将目标消息的身份证的消费状态更改为已消费成功。从而可以去重,实现了幂等消费的逻辑。
本申请另一实施例提供了一种消息的消费装置,如图4所示,具体包括:
获取单元401,获取目标消息。
其中,目标消息包括:幂等标识和身份证。
需要说明的是,幂等标识为业务端自行设置或RocketMQ消息在客户端生成的标识。
存储单元402,用于将目标消息的幂等标识作为关键字,将目标消息的身份证作为值,并为目标消息的身份证添加正在消费的消费状态,存储至数据结构服务器。
第一判断单元403,用于在预设时间内,判断数据结构服务器中是否有目标消息的幂等标识。
第一确定单元404,用于若在预设时间内,第一判断单元403判断出,数据结构服务器中没有目标消息的幂等标识,则确定设置成功,进入消费流程。
存储单元402,还用于若消费成功则存储目标消息的幂等标识,并将目标消息的身份证的消费状态更改为已消费成功。
本申请上述实施例公开的单元的具体工作过程,可参见对应的方法实施例内容,如图1所示,此处不再赘述。
可选的,在本申请的另一实施例中,消息的消费装置的一种实施方式如图5所示,包括:
第二确定单元501,用于若在预设时间内,第一判断单元403判断出,数据结构服务器中有目标消息的幂等标识,则确定设置失败,获取数据结构服务器中的幂等标识对应的身份证和消费状态。
第二判断单元502,用于判断数据结构服务器中的幂等标识对应的身份证是否与目标消息的幂等标识对应的身份证一致,以及判断数据结构服务器中的幂等标识对应的消费状态是否为正在消费。
延迟单元503,用于若第二判断单元502判断出,数据结构服务器中的幂等标识对应的身份证与目标消息的幂等标识对应的身份证一致,且数据结构服务器中的幂等标识对应的消费状态为正在消费,则进入延迟流程。
去重单元504,用于若第二判断单元502判断出,数据结构服务器中的幂等标识对应的身份证不与目标消息的幂等标识对应的身份证一致,和/或数据结构服务器中的幂等标识对应的消费状态不为正在消费,则对目标消息进行去重。
本申请上述实施例公开的单元的具体工作过程,可参见对应的方法实施例内容,如图2所示,此处不再赘述。
可选的,在本申请的另一实施例中,消息的消费装置的一种实施方式,还包括:
重试单元,用于若消费未成功,则存储目标消息的幂等标识,将目标消息的身份证的消费状态更改为未消费成功,并进入重试流程。
本申请上述实施例公开的单元的具体工作过程,可参见对应的方法实施例内容,此处不再赘述。
由以上方案可知,本申请提供一种消息的消费装置:在获取单元401获取目标消息时;其中,目标消息包括:幂等标识和身份证;首先,存储单元402将目标消息的幂等标识作为关键字,将目标消息的身份证作为值,并为目标消息的身份证添加正在消费的消费状态,存储至数据结构服务器;然后,第一判断单元403在预设时间内,判断数据结构服务器中是否有目标消息的幂等标识;若第一判断单元403在预设时间内,判断出数据结构服务器中没有目标消息的幂等标识,第一确定单元404确定设置成功,进入消费流程;若消费成功则存储单元402存储目标消息的幂等标识,并将目标消息的身份证的消费状态更改为已消费成功。从而可以去重,实现了幂等消费的逻辑。
本申请另一实施例提供了一种电子设备,如图6所示,包括:
一个或多个处理器601。
存储装置602,其上存储有一个或多个程序。
当所述一个或多个程序被所述一个或多个处理器601执行时,使得所述一个或多个处理器601实现如上述实施例中任意一项所述的消息的消费方法。
本申请另一实施例提供了一种计算机存储介质,其上存储有计算机程序,其中,计算机程序被处理器执行时实现如上述实施例中任意一项所述的消息的消费方法。
在本申请公开的上述实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置和方法实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本公开的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本公开各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,直播设备,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种消息的消费方法,其特征在于,包括:
获取目标消息;其中,所述目标消息包括:幂等标识和身份证;
将所述目标消息的幂等标识作为关键字,将所述目标消息的身份证作为值,并为所述目标消息的身份证添加正在消费的消费状态,存储至数据结构服务器;
在预设时间内,判断所述数据结构服务器中是否有所述目标消息的幂等标识;
若在预设时间内,判断出所述数据结构服务器中没有所述目标消息的幂等标识,则确定设置成功,进入消费流程;
若消费成功则存储目标消息的幂等标识,并将所述目标消息的身份证的消费状态更改为已消费成功。
2.根据权利要求1所述的消费方法,其特征在于,还包括:
若在预设时间内,判断出所述数据结构服务器中有所述目标消息的幂等标识,则确定设置失败,获取所述数据结构服务器中的所述幂等标识对应的身份证和消费状态;
判断所述数据结构服务器中的所述幂等标识对应的身份证是否与所述目标消息的幂等标识对应的身份证一致,以及判断所述数据结构服务器中的所述幂等标识对应的消费状态是否为正在消费;
若判断出所述数据结构服务器中的所述幂等标识对应的身份证与所述目标消息的幂等标识对应的身份证一致,且所述数据结构服务器中的所述幂等标识对应的消费状态为正在消费,则进入延迟流程;
若判断出所述数据结构服务器中的所述幂等标识对应的身份证不与所述目标消息的幂等标识对应的身份证一致,和/或所述数据结构服务器中的所述幂等标识对应的消费状态不为正在消费,则对目标消息进行去重。
3.根据权利要求1所述的消费方法,其特征在于,还包括:
若消费未成功,则存储目标消息的幂等标识,将所述目标消息的身份证的消费状态更改为未消费成功,并进入重试流程。
4.根据权利要求1所述的消费方法,其特征在于,所述幂等标识为业务端自行设置或RocketMQ消息在客户端生成的标识。
5.一种消息的消费装置,其特征在于,包括:
获取单元,获取目标消息;其中,所述目标消息包括:幂等标识和身份证;
存储单元,用于将所述目标消息的幂等标识作为关键字,将所述目标消息的身份证作为值,并为所述目标消息的身份证添加正在消费的消费状态,存储至数据结构服务器;
第一判断单元,用于在预设时间内,判断所述数据结构服务器中是否有所述目标消息的幂等标识;
第一确定单元,用于若在预设时间内,所述第一判断单元判断出,所述数据结构服务器中没有所述目标消息的幂等标识,则确定设置成功,进入消费流程;
所述存储单元,还用于若消费成功则存储目标消息的幂等标识,并将所述目标消息的身份证的消费状态更改为已消费成功。
6.根据权利要求5所述的消费装置,其特征在于,还包括:
第二确定单元,用于若在预设时间内,所述第一判断单元判断出,所述数据结构服务器中有所述目标消息的幂等标识,则确定设置失败,获取所述数据结构服务器中的所述幂等标识对应的身份证和消费状态;
第二判断单元,用于判断所述数据结构服务器中的所述幂等标识对应的身份证是否与所述目标消息的幂等标识对应的身份证一致,以及判断所述数据结构服务器中的所述幂等标识对应的消费状态是否为正在消费;
延迟单元,用于若所述第二判断单元判断出,所述数据结构服务器中的所述幂等标识对应的身份证与所述目标消息的幂等标识对应的身份证一致,且所述数据结构服务器中的所述幂等标识对应的消费状态为正在消费,则进入延迟流程;
去重单元,用于若所述第二判断单元判断出,所述数据结构服务器中的所述幂等标识对应的身份证不与所述目标消息的幂等标识对应的身份证一致,和/或所述数据结构服务器中的所述幂等标识对应的消费状态不为正在消费,则对目标消息进行去重。
7.根据权利要求5所述的消费装置,其特征在于,还包括:
重试单元,用于若消费未成功,则存储目标消息的幂等标识,将所述目标消息的身份证的消费状态更改为未消费成功,并进入重试流程。
8.根据权利要求5所述的消费装置,其特征在于,所述幂等标识为业务端自行设置或RocketMQ消息在客户端生成的标识。
9.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,其上存储有一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1至4中任一所述的消息的消费方法。
10.一种计算机存储介质,其特征在于,其上存储有计算机程序,其中,所述计算机程序被处理器执行时实现如权利要求1至4中任一所述的消息的消费方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111504670.3A CN113900842B (zh) | 2021-12-10 | 2021-12-10 | 消息的消费方法、装置、电子设备及计算机存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111504670.3A CN113900842B (zh) | 2021-12-10 | 2021-12-10 | 消息的消费方法、装置、电子设备及计算机存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113900842A true CN113900842A (zh) | 2022-01-07 |
CN113900842B CN113900842B (zh) | 2022-04-26 |
Family
ID=79025580
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111504670.3A Active CN113900842B (zh) | 2021-12-10 | 2021-12-10 | 消息的消费方法、装置、电子设备及计算机存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113900842B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115001998A (zh) * | 2022-04-26 | 2022-09-02 | 北京贝壳时代网络科技有限公司 | 一种消息服务的容灾方法和装置 |
CN115658339A (zh) * | 2022-10-21 | 2023-01-31 | 广州市玄武无线科技股份有限公司 | 一种实现接口消息幂等的方法、***、装置及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090157552A1 (en) * | 2007-12-12 | 2009-06-18 | Microsoft Corporation | Digital content packaging, licensing and consumption |
CN110489437A (zh) * | 2019-08-21 | 2019-11-22 | 中国工商银行股份有限公司 | 分布式事务处理方法、装置、计算机设备及存储介质 |
CN112559217A (zh) * | 2020-12-22 | 2021-03-26 | 鲁班(北京)电子商务科技有限公司 | 一种消息可靠性消费幂等处理方法及处理装置 |
CN113064741A (zh) * | 2021-04-07 | 2021-07-02 | 上海万物新生环保科技集团有限公司 | 一种消息队列重试方法及设备 |
CN113342541A (zh) * | 2021-04-30 | 2021-09-03 | 北京房江湖科技有限公司 | 一种消息的消费方法和装置、计算设备和存储介质 |
-
2021
- 2021-12-10 CN CN202111504670.3A patent/CN113900842B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090157552A1 (en) * | 2007-12-12 | 2009-06-18 | Microsoft Corporation | Digital content packaging, licensing and consumption |
CN110489437A (zh) * | 2019-08-21 | 2019-11-22 | 中国工商银行股份有限公司 | 分布式事务处理方法、装置、计算机设备及存储介质 |
CN112559217A (zh) * | 2020-12-22 | 2021-03-26 | 鲁班(北京)电子商务科技有限公司 | 一种消息可靠性消费幂等处理方法及处理装置 |
CN113064741A (zh) * | 2021-04-07 | 2021-07-02 | 上海万物新生环保科技集团有限公司 | 一种消息队列重试方法及设备 |
CN113342541A (zh) * | 2021-04-30 | 2021-09-03 | 北京房江湖科技有限公司 | 一种消息的消费方法和装置、计算设备和存储介质 |
Non-Patent Citations (1)
Title |
---|
中生代技术: "消息幂等(去重)通用解决方案,RocketMQ", 《CSDN》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115001998A (zh) * | 2022-04-26 | 2022-09-02 | 北京贝壳时代网络科技有限公司 | 一种消息服务的容灾方法和装置 |
CN115001998B (zh) * | 2022-04-26 | 2024-02-23 | 北京贝壳时代网络科技有限公司 | 一种消息服务的容灾方法和装置 |
CN115658339A (zh) * | 2022-10-21 | 2023-01-31 | 广州市玄武无线科技股份有限公司 | 一种实现接口消息幂等的方法、***、装置及存储介质 |
CN115658339B (zh) * | 2022-10-21 | 2023-11-14 | 广州市玄武无线科技股份有限公司 | 一种实现接口消息幂等的方法、***、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113900842B (zh) | 2022-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113900842B (zh) | 消息的消费方法、装置、电子设备及计算机存储介质 | |
CN106817295B (zh) | 一种消息处理装置和方法 | |
CN109614209B (zh) | 一种任务处理方法、应用服务器及*** | |
US7356531B1 (en) | Network file system record lock recovery in a highly available environment | |
CN112418794B (zh) | 一种业务流转的方法及装置 | |
CN106899654B (zh) | 一种序列值生成方法、装置及*** | |
CN107040576B (zh) | 信息推送方法及装置、通讯*** | |
CN106878363A (zh) | 一种信息处理方法、装置及*** | |
CN108600284B (zh) | 一种基于Ceph的虚拟机高可用实现方法及*** | |
CN105162879A (zh) | 实现多机房数据一致性的方法、装置及*** | |
CN107819556B (zh) | 一种服务状态切换方法及装置 | |
CN114064780A (zh) | 会话信息的处理方法、***、装置、存储介质及电子设备 | |
CN112865992A (zh) | 分布式主从***中主节点的切换方法、装置和计算机设备 | |
US8719622B2 (en) | Recording and preventing crash in an appliance | |
EP2416526B1 (en) | Task switching method, server node and cluster system | |
CN111309548A (zh) | 一种超时监控方法、装置及计算机可读存储介质 | |
CN108509296B (zh) | 一种处理设备故障的方法和*** | |
CN113946427A (zh) | 用于多操作***的任务处理方法、处理器及存储介质 | |
CN112631727A (zh) | 一种容器组pod的监控方法及装置 | |
CN111226200B (zh) | 为分布式应用创建一致性快照的方法、装置和分布式*** | |
CN109558249B (zh) | 一种并发操作的控制方法及装置 | |
CN112860746B (zh) | 一种基于缓存削减的方法、设备及*** | |
CN114090055A (zh) | 应用程序更新方法、装置、终端及存储介质 | |
CN106453455A (zh) | 一种语音文件同步方法和装置 | |
CN107832124B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |