一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种实现接口消息幂等的方法、系统、装置及存储介质与流程

2023-02-01 23:40:17 来源:中国专利 TAG:


1.本发明涉及计算机技术领域,尤其是实现接口消息幂等的方法、系统、装置及存储介质。


背景技术:

2.请求幂等是指对于同一个请求,请求一次或多次,对服务端数据的影响都是一样的。目前的主流请求幂等方案都是服务端通过redis、zookeeper或者数据库的原子性保证相同请求能被过滤掉,从而保证请求幂等性。存在对于请求多发或者少发地取舍。
3.虽然现有技术能够过滤相同请求,但是存在如下问题:服务端将消息放到幂等表或者缓存后,服务端出现异常,请求则会被认为是失败的;这时触发请求重试,由于消息已经存入幂等表或者缓存,会触发服务端幂等过滤,最终会造成请求丢失。


技术实现要素:

4.有鉴于此,本发明实施例提供了一种检测精度高,部署成本低的,一种实现接口消息幂等的方法、系统、装置及存储介质。
5.一方面,本发明实施例提供了一种实现接口消息幂等的方法,包括:
6.获取服务请求,基于所述服务请求,在第一预设期限内进行请求去重处理;
7.根据所述服务请求,执行目标处理,得到处理状态;
8.其中,所述处理状态包括成功状态、失败状态和已存在状态;
9.当所述执行状态为已存在状态,在第二预设期限后,根据所述服务请求进行处理校验,得到处理结果;
10.其中,所述第二预设期限大于所述第一预设期限;
11.当所述处理结果为失败,返回根据所述服务请求,执行目标处理,得到处理状态这一步骤,直至得到处理状态为成功状态或失败状态,或,得到处理结果为成功。
12.可选地,还包括:
13.通过幂等表或缓存保存所述服务请求。
14.可选地,所述基于所述服务请求,在第一预设期限内进行请求去重处理,包括:
15.基于客户端的所述服务请求,通过服务端的预设组件,过滤在第一预设期限内重复获取到的所述服务请求;
16.其中,所述预设组件包括数据库和redis。
17.可选地,所述根据所述服务请求,执行目标处理,得到处理状态这一步骤后,还包括:
18.当所述处理状态为成功状态,或第一预设期限后,删除所述幂等表或所述缓存中的所述服务请求。
19.可选地,所述失败状态包括第一失败状态,所述方法还包括:
20.当所述失败状态为第一失败状态,删除所述幂等表或所述缓存中的所述服务请
求。
21.可选地,所述失败状态包括第二失败状态,所述方法还包括:
22.当所述失败状态为第二失败状态,通过客户端基于所述服务请求进行请求重试处理;
23.根据所述请求重试处理,执行所述目标处理,直至达到预设重试次数、得到成功状态的处理状态或已存在状态的处理状态。
24.可选地,所述当所述执行状态为已存在状态,在第二预设期限后,根据所述服务请求进行处理校验,得到处理结果,包括:
25.当所述执行状态为已存在状态,通过客户端保存所述服务请求;
26.在第二预设期限后,通过客户端的所述服务请求校验服务端的所述目标处理是否处理成功,得到处理结果。
27.第二方面,本发明实施例提供了一种实现接口消息幂等的系统,包括:
28.第一模块,用于获取服务请求,基于所述服务请求,在第一预设期限内进行请求去重处理;
29.第二模块,用于根据所述服务请求,执行目标处理,得到处理状态;其中,所述处理状态包括成功状态、失败状态和已存在状态;
30.第三模块,用于当所述执行状态为已存在状态,在第二预设期限后,根据所述服务请求进行处理校验,得到处理结果;其中,所述第二预设期限大于所述第一预设期限;
31.第四模块,用于当所述处理结果为失败,返回根据所述服务请求,执行目标处理,得到处理状态这一步骤,直至得到处理状态为成功状态或失败状态,或,得到处理结果为成功。
32.另一方面,本发明实施例提供了一种实现接口消息幂等的装置,包括处理器以及存储器;
33.所述存储器用于存储程序;
34.所述处理器执行所述程序实现如前面所述的方法。
35.另一方面,本发明实施例提供了一种计算机可读存储介质,所述存储介质存储有程序,所述程序被处理器执行实现如前面所述的方法。
36.本发明实施例还公开了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行前面的方法。
37.本发明的实施例首先获取服务请求,基于所述服务请求,在第一预设期限内进行请求去重处理;根据所述服务请求,执行目标处理,得到处理状态;其中,所述处理状态包括成功状态、失败状态和已存在状态;当所述执行状态为已存在状态,在第二预设期限后,根据所述服务请求进行处理校验,得到处理结果;其中,所述第二预设期限大于所述第一预设期限;当所述处理结果为失败,返回根据所述服务请求,执行目标处理,得到处理状态这一步骤,直至得到处理状态为成功状态或失败状态,或,得到处理结果为成功。本发明通过对服务请求的请求去重处理,保证了请求幂等性,并且通过处理状态和处理结果的二次校验,防止了请求丢失,并且基于二次校验,当服务请求对应的目标处理的处理结果失败时,重新
响应服务请求执行目标处理,能够保证服务请求处理的成功率。
附图说明
38.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
39.图1为本发明实施例提供的实现接口消息幂等的方法的整体步骤流程示意图;
40.图2为本发明实施例提供的实现接口消息幂等的方法的实施流程示意图;
41.图3为本发明实施例提供的返回失败状态后的重试流程示意图;
42.图4为本发明实施例提供的实现接口消息幂等的系统的示意图;
43.图5为本发明实施例提供的实现接口消息幂等的装置的示意图。
具体实施方式
44.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
45.针对现有技术存在的问题,一方面,本发明提供了一种实现接口消息幂等的方法,如图1所示,方法包括以下步骤:
46.s100、获取服务请求,基于服务请求,在第一预设期限内进行请求去重处理;
47.需要说明的是,一些实施例中,还包括:通过幂等表或缓存保存服务请求;基于服务请求,在第一预设期限内进行请求去重处理,包括:基于客户端的服务请求,通过服务端的预设组件,过滤在第一预设期限内重复获取到的服务请求;其中,预设组件包括数据库和redis。
48.具体地,服务端通过redis或者数据库的原子性保证相同请求能被过滤掉,从而保证请求幂等性;并且服务端根据请求去重,去重方式可以用数据库、redis或者其他中间件,请求去重时间设置为x分钟,表示这x分钟内再有相同请求,则过滤。
49.s200、根据服务请求,执行目标处理,得到处理状态;
50.需要说明的是,处理状态包括成功状态、失败状态和已存在状态;其中,成功状态表示服务端对于客户端的服务请求成功执行相关目标处理;失败状态则表示服务端对于客户端的服务请求未执行相关目标处理;而已存在状态表示服务请求已保存于服务端(如通过幂等表或缓存保存),但基于服务请求的目标处理的处理状态为不明确状态,服务端可能已经处理成功,也可能只是记录了请求,但没有处理成功。
51.其中,一些实施例中,当处理状态为成功状态,或第一预设期限后,删除幂等表或缓存中的服务请求。还需要说明的是,失败状态分为不可重试的失败状态(即第一失败状态)和可重试的失败状态(即第二失败状态)。另一些实施例中,当失败状态为第一失败状态,删除幂等表或缓存中的服务请求;还包括:当失败状态为第二失败状态,通过客户端基于服务请求进行请求重试处理;根据请求重试处理,执行目标处理,直至达到预设重试次数、得到成功状态的处理状态或已存在状态的处理状态。
52.s300、当执行状态为已存在状态,在第二预设期限后,根据服务请求进行处理校验,得到处理结果;
53.需要说明的是,第二预设期限大于第一预设期限;当执行状态为已存在状态,通过客户端保存服务请求;在第二预设期限后,通过客户端的服务请求校验服务端的目标处理是否处理成功,得到处理结果。
54.s400、当处理结果为失败,返回根据服务请求,执行目标处理,得到处理状态这一步骤,直至得到处理状态为成功状态或失败状态,或,得到处理结果为成功。
55.下面详细描述本发明的实现接口消息幂等的的实现原理,如图2所示,本发明的技术方案基于服务端和客户端相结合来实现,下述是对本发明技术方案的解释而不是限定:
56.服务端处理:
57.步骤1:服务端根据请求去重,去重方式可以用数据库、redis或者其他中间件。
58.步骤2:请求去重时间设置为x分钟,表示这x分钟内再有相同请求,则过滤。
59.步骤3:服务端处理请求,处理完成后,返回处理状态给客户端。
60.客户端分3种情况进行处理:
61.情况1:服务端返回成功状态,客户端可以直接按成功进行处理。
62.情况2:服务端返回失败状态。可以将失败状态分为可重试的失败状态和不可重试的失败状态。可重试的失败状态,则由客户端进行重试。直到超过客户端重试次数、服务端返回成功或者服务端返回已存在状态,才停止重试。
63.具体地,如图3所示,返回失败状态后的重试流程如下:
64.1.客户端发送请求,服务端返回失败状态;
65.2.客户端判断是否符合重试条件。如果不符合直接结束流程;
66.3.如果符合重试条件,则重复1至2。
67.情况3:服务端返回已存在状态。这种状态为不明确状态,服务端可能已经处理成功,也可能只是记录了请求,但没有处理成功。针对这种情况,需要进行二次校验。客户端在接收到这种状态后,将这个请求保存,等待y分钟后(y》x),用这个请求校验服务端是否处理成功。如果校验结果为不成功,则客户端对这个请求进行再次发送。
68.为了更加清晰的说明本发明的目的与内容,下面结合具体实施例对本发明作进一步的描述,但本发明的实施方式不限于此。
69.以短信下发接口为例,短信用msgid作为唯一标识
70.实施例1:
71.1)客户端发送一条短信到服务端
72.2)服务端将msgid记录到redis中,然后将短信转发到运营商
73.3)服务端处理成功,将成功结果返回给客户端,请求完成
74.实施例2:
75.1)客户端发送一条短信到服务端
76.2)短信还未到服务端,出现网络异常
77.3)网络异常为需要重试的异常,客户端需要进行重试,最大重试次数为3次,每次重试间隔3秒
78.4)重试1次后,这时网络恢复,短信成功下发到服务端,服务端将短信成功转发到
运营商。将成功结果返回给客户端,请求完成。
79.实施例3:
80.1)客户端发送一条短信到服务端
81.2)服务端将msgid记录到redis中,msgid的过期时间设置为1分钟。接着突然出现网络异常。
82.3)网络异常为需要重试的异常,客户端需要进行重试,短信达到服务端
83.4)这时msgid已经记录到redis中,服务端判断这条短信已经发送过,给客户端返回已存在状态
84.5)已存在状态为不明确状态。客户端记录下该msgid,等待3分钟后,检查该msgid是否已经成功发送到运营商
85.6)如果成功发送到运营商,客户端就可以删除该msgid
86.7)如果未成功发送到运营商,客户端则重发这条短信。由于已经超过服务端msgid的保存时间,所以这条短信可以成功转发到运营商。
87.8)对短信下发成功率要求高的场景,如果第7步处理失败,可以继续重复1)至7)步骤进行重试。直到短信下发成功为止。
88.另一方面,参照图4,本发明实施例提供了一种实现接口消息幂等的系统500,包括第一模块510、第二模块520、第三模块530和第四模块540;第一模块510,用于获取服务请求,基于服务请求,在第一预设期限内进行请求去重处理;第二模块520,用于根据服务请求,执行目标处理,得到处理状态;其中,处理状态包括成功状态、失败状态和已存在状态;第三模块530,用于当执行状态为已存在状态,在第二预设期限后,根据服务请求进行处理校验,得到处理结果;其中,第二预设期限大于第一预设期限;第四模块540,用于当处理结果为失败,返回根据服务请求,执行目标处理,得到处理状态这一步骤,直至得到处理状态为成功状态或失败状态,或,得到处理结果为成功。
89.本发明方法实施例的内容均适用于本系统实施例,本系统实施例所具体实现的功能与上述方法实施例相同,并且达到的有益效果与上述方法达到的有益效果也相同。
90.参照图5,本发明实施例的另一方面还提供了一种实现接口消息幂等的装置600,包括处理器610以及存储器620;存储器610用于存储程序;处理器620执行程序实现如前面所述的方法。
91.本发明方法实施例的内容均适用于本装置实施例,本装置实施例所具体实现的功能与上述方法实施例相同,并且达到的有益效果与上述方法达到的有益效果也相同。
92.本发明实施例的另一方面还提供了一种计算机可读存储介质,所述存储介质存储有程序,所述程序被处理器执行实现如前面所述的方法。
93.本发明方法实施例的内容均适用于本计算机可读存储介质实施例,本计算机可读存储介质实施例所具体实现的功能与上述方法实施例相同,并且达到的有益效果与上述方法达到的有益效果也相同。
94.本发明实施例还公开了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行前面的方法。
95.综上所述,本发明通过服务端和客户端相结合实现幂等性,客户端做重试,服务端做幂等;对于不确定的状态,客户端做延迟二次校验。通过本发明的技术方案实现的接口,面对异常场景,能很好地保证请求幂等性,以及保证请求不丢失。
96.在一些可选择的实施例中,在方框图中提到的功能/操作可以不按照操作示图提到的顺序发生。例如,取决于所涉及的功能/操作,连续示出的两个方框实际上可以被大体上同时地执行或所述方框有时能以相反顺序被执行。此外,在本发明的流程图中所呈现和描述的实施例以示例的方式被提供,目的在于提供对技术更全面的理解。所公开的方法不限于本文所呈现的操作和逻辑流程。可选择的实施例是可预期的,其中各种操作的顺序被改变以及其中被描述为较大操作的一部分的子操作被独立地执行。
97.此外,虽然在功能性模块的背景下描述了本发明,但应当理解的是,除非另有相反说明,所述的功能和/或特征中的一个或多个可以被集成在单个物理装置和/或软件模块中,或者一个或多个功能和/或特征可以在单独的物理装置或软件模块中被实现。还可以理解的是,有关每个模块的实际实现的详细讨论对于理解本发明是不必要的。更确切地说,考虑到在本文中公开的装置中各种功能模块的属性、功能和内部关系的情况下,在工程师的常规技术内将会了解该模块的实际实现。因此,本领域技术人员运用普通技术就能够在无需过度试验的情况下实现在权利要求书中所阐明的本发明。还可以理解的是,所公开的特定概念仅仅是说明性的,并不意在限制本发明的范围,本发明的范围由所附权利要求书及其等同方案的全部范围来决定。
98.所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
99.在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。
100.计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(ram),只读存储器(rom),可擦除可编辑只读存储器(eprom或闪速存储器),光纤装置,以及便携式光盘只读存储器(cdrom)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
101.应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述
实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。
102.在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
103.尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。
104.以上是对本发明的较佳实施进行了具体说明,但本发明并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做出种种的等同变形或替换,这些等同的变形或替换均包含在本技术权利要求所限定的范围内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献