一种处理消息的方法和装置制造方法及图纸

技术编号:28836832 阅读:28 留言:0更新日期:2021-06-11 23:34
本发明专利技术公开了一种处理消息的方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:获取待处理消息的幂等令牌;利用幂等令牌查询网络缓存、本地缓存以及消息数据库,以确定待处理消息是否被处理;当待处理消息未被处理时,对待处理消息进行处理,并存储待处理消息。该实施方式能够避免消息被重复消费或内存过度浪费,实现真正的消息幂等性;以及能够追溯订单编号与消息的关系。

【技术实现步骤摘要】
一种处理消息的方法和装置
本专利技术涉及计算机
,尤其涉及一种处理消息的方法和装置。
技术介绍
现有的消息队列,为了保证消息的可达性所采用的超时、重传或确认机制,可能会导致消息队列服务端或业务方收到重复的消息,从而对业务产生影响。消息幂等性是消息重复多次,消费者端对该重复消息消费多次与消费一次的结果是相同的,并且多次消费没有对系统产生副作用。目前,实现消息幂等的方法是将消息在Redis缓存中存储一段时间,在消费某个消息时,如果Redis缓存中存在该消息,则表示该消息被重复消息,可以将该消息丢弃。在实现本专利技术过程中,专利技术人发现现有技术中至少存在如下问题:若Redis缓存时间短,易导致消息被重复消费;若Redis缓存时间长,易导致内存过度浪费;以及无法追溯订单编号与消息的关系。
技术实现思路
有鉴于此,本专利技术实施例提供一种处理消息的方法和装置,能够避免消息被重复消费或内存过度浪费,实现真正的消息幂等性;以及能够追溯任务单与消息的关系。为实现上述目的,根据本专利技术实施例的一个方面,提供了一种处理消息的方法。本专利技术实施例的一种处理消息的方法包括:获取待处理消息的幂等令牌;利用所述幂等令牌查询网络缓存、本地缓存以及消息数据库,以确定所述待处理消息是否被处理;当所述待处理消息未被处理时,对所述待处理消息进行处理,并存储所述待处理消息。可选地,所述幂等令牌由所述待处理消息的任务标识及对应的时间戳组成;以及获取待处理消息的幂等令牌,包括:从消息队列中获取待处理消息;提取所述待处理消息的幂等令牌。可选地,利用所述幂等令牌查询网络缓存、本地缓存以及消息数据库,以确定所述待处理消息是否被处理,包括:在本地缓存中查询所述幂等令牌;若所述本地缓存中存在所述幂等令牌,则所述待处理消息已被处理;若所述本地缓存中不存在所述幂等令牌,则在网络缓存中将所述幂等令牌设置为键;若设置失败,则所述待处理消息已被处理;若设置成功,则在消息数据库中查询所述幂等令牌,以确定所述待处理消息是否被处理。可选地,在消息数据库中查询所述幂等令牌,以确定所述待处理消息是否被处理,包括:判断所述幂等令牌是否为所述消息数据库中的主键;若是,则所述待处理消息已被处理;若否,则所述待处理消息未被处理。可选地,对所述待处理消息进行处理,并存储所述待处理消息,包括:对所述待处理消息进行处理;将所述幂等令牌缓存于所述本地缓存;以及以所述幂等令牌作为主键将所述待处理消息存储于所述消息数据库。为实现上述目的,根据本专利技术实施例的又一方面,提供了一种处理消息的装置。本专利技术实施例的一种处理消息的装置包括:获取模块,用于获取待处理消息的幂等令牌;查询模块,用于利用所述幂等令牌查询网络缓存、本地缓存以及消息数据库,以确定所述待处理消息是否被处理;处理模块,用于当所述待处理消息未被处理时,对所述待处理消息进行处理,并存储所述待处理消息。可选地,所述幂等令牌由所述待处理消息的任务标识及对应的时间戳组成;以及所述获取模块还用于:从消息队列中获取待处理消息;提取所述待处理消息的幂等令牌。可选地,所述查询模块还用于:在本地缓存中查询所述幂等令牌;若所述本地缓存中存在所述幂等令牌,则所述待处理消息已被处理;若所述本地缓存中不存在所述幂等令牌,则在网络缓存中将所述幂等令牌设置为键;若设置失败,则所述待处理消息已被处理;若设置成功,则在消息数据库中查询所述幂等令牌,以确定所述待处理消息是否被处理。可选地,所述查询模块进一步用于:判断所述幂等令牌是否为所述消息数据库中的主键;若是,则所述待处理消息已被处理;若否,则所述待处理消息未被处理。可选地,所述处理模块还用于:对所述待处理消息进行处理;将所述幂等令牌缓存于所述本地缓存;以及以所述幂等令牌作为主键将所述待处理消息存储于所述消息数据库。为实现上述目的,根据本专利技术实施例的又一方面,提供了一种处理消息的电子设备。本专利技术实施例的一种处理消息的电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本专利技术实施例的一种处理消息的方法。为实现上述目的,根据本专利技术实施例的再一方面,提供了一种计算机可读存储介质。本专利技术实施例的一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现本专利技术实施例的一种处理消息的方法。上述专利技术中的一个实施例具有如下优点或有益效果:因为采用获取待处理消息的幂等令牌;利用幂等令牌查询网络缓存、本地缓存以及消息数据库,以确定待处理消息是否被处理;当待处理消息未被处理时,对待处理消息进行处理,并存储待处理消息的技术手段,所以克服了消息被重复消费或内存过度浪费;以及无法追溯任务单与消息关系的技术问题,进而达到能够避免消息被重复消费或内存过度浪费,实现真正的消息幂等性;以及能够追溯任务单与消息关系的技术效果。上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。附图说明附图用于更好地理解本专利技术,不构成对本专利技术的不当限定。其中:图1是根据本专利技术实施例的处理消息的方法的主要步骤的示意图;图2是根据本专利技术一个可参考实施例的处理消息的方法的实施流程的示意图;图3是根据本专利技术实施例的处理消息的装置的主要模块的示意图;图4是本专利技术实施例可以应用于其中的示例性系统架构图;图5是适于用来实现本专利技术实施例的终端设备或服务器的计算机系统的结构示意图。具体实施方式以下结合附图对本专利技术的示范性实施例做出说明,其中包括本专利技术实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本专利技术的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。需要指出的是,在不冲突的情况下,本专利技术的实施例以及实施例中的技术特征可以相互结合。图1是根据本专利技术实施例的处理消息的方法的主要步骤的示意图。如图1所示,本专利技术实施例的处理消息的方法主要包括以下步骤:步骤S101:获取待处理消息的幂等令牌。幂等令牌用于唯一标识同一个待处理消息,可以在生成待处理消息时创建。由于幂等令牌的唯一性,可以根据幂等令牌来判断待处理消息是否已处理过。在本专利技术实施例中,步骤S101可以采用以下方式实现:从消息队列中获取待处理消息;提取待处理消息的幂等令牌。幂等令牌可以由任务标识和时间戳组成,对任务标识和时间戳按特定规则进行处理即可以得到幂等令牌,本文档来自技高网...

【技术保护点】
1.一种处理消息的方法,其特征在于,包括:/n获取待处理消息的幂等令牌;/n利用所述幂等令牌查询网络缓存、本地缓存以及消息数据库,以确定所述待处理消息是否被处理;/n当所述待处理消息未被处理时,对所述待处理消息进行处理,并存储所述待处理消息。/n

【技术特征摘要】
1.一种处理消息的方法,其特征在于,包括:
获取待处理消息的幂等令牌;
利用所述幂等令牌查询网络缓存、本地缓存以及消息数据库,以确定所述待处理消息是否被处理;
当所述待处理消息未被处理时,对所述待处理消息进行处理,并存储所述待处理消息。


2.根据权利要求1所述的方法,其特征在于,所述幂等令牌由所述待处理消息的任务标识及对应的时间戳组成;以及
获取待处理消息的幂等令牌,包括:
从消息队列中获取待处理消息;
提取所述待处理消息的幂等令牌。


3.根据权利要求1所述的方法,其特征在于,利用所述幂等令牌查询网络缓存、本地缓存以及消息数据库,以确定所述待处理消息是否被处理,包括:
在本地缓存中查询所述幂等令牌;
若所述本地缓存中存在所述幂等令牌,则所述待处理消息已被处理;
若所述本地缓存中不存在所述幂等令牌,则在网络缓存中将所述幂等令牌设置为键;
若设置失败,则所述待处理消息已被处理;
若设置成功,则在消息数据库中查询所述幂等令牌,以确定所述待处理消息是否被处理。


4.根据权利要求3所述的方法,其特征在于,在消息数据库中查询所述幂等令牌,以确定所述待处理消息是否被处理,包括:
判断所述幂等令牌是否为所述消息数据库中的主键;
若是,则所述待处理消息已被处理;
若否,则所述待处理消息未被处理。


5.根据权利要求1所述的方法,其特征在于,对所述待处理消息进行处理,并存储所述待处理消息,包括:
对所述待处理消息进行处理;
将所述幂等令牌缓存于所述本地缓存;以及
以所述幂等令牌作为主键将所述待处理消息存储于所述消息数据库。


6.一种处理消息的装置,其特征在于,包括:
获取模块,用于获取待处理消息的幂等令牌;
查询模块,用于利用所述幂等令牌...

【专利技术属性】
技术研发人员:赵正威
申请(专利权)人:北京沃东天骏信息技术有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1