CN111752720B - 一种异步请求伪装同步请求方法 - Google Patents
一种异步请求伪装同步请求方法 Download PDFInfo
- Publication number
- CN111752720B CN111752720B CN202010615668.2A CN202010615668A CN111752720B CN 111752720 B CN111752720 B CN 111752720B CN 202010615668 A CN202010615668 A CN 202010615668A CN 111752720 B CN111752720 B CN 111752720B
- Authority
- CN
- China
- Prior art keywords
- class
- result
- asynchronous
- processing
- isdone
- 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.)
- Active
Links
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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- 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/547—Remote procedure calls [RPC]; Web services
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及异步请求调用领域,提供了一种异步请求伪装同步请求方法。主旨在于使后端还是异步请求,但是伪装成同步请求给前端,前端保持了业务的连贯性。主要方案包括,前端页面请求后端接口;自定义异步执行器类,在此类自定义异步注解@Async;定义一个异步处理结果的类,此类中支持泛型T,泛型T来接收返回结果类;在异步处理结果类中定义一个isDone方法,通过isDone方法,判断异步方法是否执行完成;新建调用实例,在实例中通过判断isDone方法是否执行完成,来获对应的取返回处理结果;前端获取处理结果,如果是正常结果,则按需求展示,如果结果为不正常,则请求一个单独的查询结果请求方法,返回执行结果,同时页面出现友好提示,提示业务耐心等待。
Description
技术领域
本发明涉及异步请求调用领域,提供了一种异步请求伪装同步请求方法。
背景技术
在越来越追求高效,高速相应的同时,也有一些应用去拥抱AI或流程化机器人,这些智能化的东西更多是计算、模型训练以及拟人操作,这就意味着他背后会有大量的运算,也就意味着耗时长,这样他们提供的一些api接口就是异步调用的,但是很多业务场景上又要求业务连贯性,需要同步等待结果,基于这种场景就产生了一种异步请求伪装成同步请求处理的方法;
发明内容
本发明涉及异步请求调用领域,提供了一种异步请求伪装同步请求方法,其主旨在于解决业务上流程自上而下必须保持连贯性,但是后端服务为异步调用方式,此情况需要等待异步返回结果,才能保证业务上的连贯性的问题,解决此问题的方法为:后端还是异步请求,但是伪装成同步请求给前端,前端保持了业务的连贯性,同时满足后端必须是异步请求。
一种异步请求伪装同步请求方法,包括如下步骤:
S1、前端页面请求后端接口;
S2、自定义异步执行器类,在此类自定义异步注解@Async,在对应业务处理类上使用@Async注解即可达到单独线程执行即异步请求的效果;
S3、定义一个异步处理结果的类,此类中支持泛型T,泛型T来接收返回结果类;
S4、在异步处理结果类中定义一个isDone方法,通过isDone方法,判断异步方法是否执行完成;
S5、新建调用实例,在实例中通过判断isDone方法是否执行完成,来获对应的取返回处理结果;
S6、前端获取处理结果,如果是正常结果,则按需求展示,如果结果为不正常,则请求一个单独的查询结果请求方法,此方法为补偿机制,防止未异步执行完成,就返回执行结果,同时页面出现友好提示,提示业务耐心等待;
S7、设置前后端保持长连接,避免前后端请求超时中断。
上述技术方案中:所述步骤S1包括以下步骤:
步骤1:新建API类,在API类中定义后端远程接口URL;
步骤2:通过远程RPC方式,调用远程后端的接口;
上述技术方案中:所述步骤S2包括以下步骤:
步骤1:新建类,得到自定义异步执行器E类;
步骤2:在E类中申明一个Async注解,该注解利用项目启动时,自动注入到sping容器中,容器初始化的时候利用spring的AOP原理在被注解的方法上增加一个环绕行切面,生成一个动态代理E类,以达到单独起一个线程,单独执行;
步骤3:新建业务逻辑处理类A,并在业务逻辑类A的B方法上使用@Async来注解,这样B方法在执行时会以一个单独线程来执行,以达到异步处理的效果,B方法为要求异步调用的第三方API接口;
上述技术方案中:所述步骤S3包括以下步骤:
步骤1:新建处理结果类Result,此Result为自定义结果公共类,包括:返回码code,返回信息msg,返回内容data,Result类专门接收处理结果;
步骤2:在被@Async注解的业务逻辑处理类A中的B方法里面远程调用第三方API,设置一个处理时长timeout,时间超过这个处理时长,去查询异步回调结果,如果有结果,则创建一个Result去接收处理结果;
步骤3:将处理后的Result类,通过自定义异步执行器E类的泛型T,来托管到E类中;
步骤4:将自定义异步执行器E类作为业务逻辑处理类A的返回值,return到上游调用接口。
上述技术方案中:所述步骤S4包括以下步骤:
步骤1:在自定义异步执行器E类中定义一个isDone方法,通过isDone方法来判断异步处理流程是否执行完成;
步骤2:isDone方法如果结果正常为ture,如果结果异常或结果为空则为false;
上述技术方案中:所述步骤S5包括以下步骤:
步骤1:新建类C,C类为对外提供RPC服务类,同时也是业务逻辑处理类A的调用方;
步骤2:在C类中通过判断异步执行器E的isDone()方法,判断异步处理的结果是否为ture,如果是ture则获取到返回结果,使用get()方法获取到公共结果Result,并返回给前端;
步骤3:补偿机制,如果没有取到是需要循环去取,同时也可以设置一个timeout时间防止循环结果还是未异步处理完成,但是要注意的是补偿机制需要一个循环次数限制,避免死循环。
上述技术方案中:所述步骤S6包括以下步骤:
步骤1:在前端页面获取返回结果Result,如果code为成功标识码,获取data数据按需求展示;
步骤2:如果code为失败,展示失败原因msg;
步骤3:如果code为未获取到数据,提供专门查询处理结果的接口来查询,同时页面展示友好提示,提示业务耐心等待;
上述技术方案中:所述步骤S7包括以下步骤:
步骤1:设置nginx保持长连接,避免前端请求超时中断,设置nginx的proxy_read_timeout 300。
因为本发明采用上述技术方案,因此具备以下有益效果:
一、该方案适用于后端接口为异步调用第三方api,但是业务***又需要同步接收结果以保持业务连贯性的场景;
二、适应场景,可无缝接入各个***,都可使用此方式:
适用于异步调用异步返回和异步调用同步返回的场景,轻量级组件,只要场景对应即可使用,可以无缝接入各个***,可降低***之间的耦合性,可提高***的业务变化的柔性和响应性。
三、对业务操作无感,内部操作虽然是异步调用,但是对于业务操作并没有分成多个步骤,保证了业务的流畅性和连贯性。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明,即所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。
本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,术语“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
一种异步请求伪装同步请求方法,包括如下步骤:
S1、前端页面请求后端接口;
S2、自定义异步执行器类,在此类自定义异步注解@Async,在对应业务处理类上使用@Async注解即可达到单独线程执行即异步请求的效果;
S3、定义一个异步处理结果的类,此类中支持泛型T,泛型T来接收返回结果类;
S4、在异步处理结果类中定义一个isDone方法,通过isDone方法,判断异步方法是否执行完成;
S5、新建调用实例,在实例中通过判断isDone方法是否执行完成,来获对应的取返回处理结果;
S6、前端获取处理结果,如果是正常结果,则按需求展示,如果结果为不正常,则请求一个单独的查询结果请求方法,此方法为补偿机制,防止未异步执行完成,就返回执行结果,同时页面出现友好提示,提示业务耐心等待;
S7、设置前后端保持长连接,避免前后端请求超时中断。
上述技术方案中:所述步骤S1包括以下步骤:
步骤1:新建API类,在API类中定义后端远程接口URL;
步骤2:通过远程RPC方式,调用远程后端的接口;
上述技术方案中:所述步骤S2包括以下步骤:
步骤1:新建类,得到自定义异步执行器E类;
步骤2:在E类中申明一个Async注解,该注解利用项目启动时,自动注入到sping容器中,容器初始化的时候利用spring的AOP原理在被注解的方法上增加一个环绕行切面,生成一个动态代理E类,以达到单独起一个线程,单独执行;
步骤3:新建业务逻辑处理类A,并在业务逻辑类A的B方法上使用@Async来注解,这样B方法在执行时会以一个单独线程来执行,以达到异步处理的效果,B方法为要求异步调用的第三方API接口;
上述技术方案中:所述步骤S3包括以下步骤:
步骤1:新建处理结果类Result,此Result为自定义结果公共类,包括:返回码code,返回信息msg,返回内容data,Result类专门接收处理结果;
步骤2:在被@Async注解的业务逻辑处理类A中的B方法里面远程调用第三方API,设置一个处理时长timeout,时间超过这个处理时长,去查询异步回调结果,如果有结果,则创建一个Result去接收处理结果;
步骤3:将处理后的Result类,通过自定义异步执行器E类的泛型T,来托管到E类中;
步骤4:将自定义异步执行器E类作为业务逻辑处理类A的返回值,return到上游调用接口。
上述技术方案中:所述步骤S4包括以下步骤:
步骤1:在自定义异步执行器E类中定义一个isDone方法,通过isDone方法来判断异步处理流程是否执行完成;
步骤2:isDone方法如果结果正常为ture,如果结果异常或结果为空则为false;
上述技术方案中:所述步骤S5包括以下步骤:
步骤1:新建类C,C类为对外提供RPC服务类,同时也是业务逻辑处理类A的调用方;
步骤2:在C类中通过判断异步执行器E的isDone()方法,判断异步处理的结果是否为ture,如果是ture则获取到返回结果,使用get()方法获取到公共结果Result,并返回给前端;
步骤3:补偿机制,如果没有取到是需要循环去取,同时也可以设置一个timeout时间防止循环结果还是未异步处理完成,但是要注意的是补偿机制需要一个循环次数限制,避免死循环。
上述技术方案中:所述步骤S6包括以下步骤:
步骤1:在前端页面获取返回结果Result,如果code为成功标识码,获取data数据按需求展示;
步骤2:如果code为失败,展示失败原因msg;
步骤3:如果code为未获取到数据,提供专门查询处理结果的接口来查询,同时页面展示友好提示,提示业务耐心等待;
上述技术方案中:所述步骤S7包括以下步骤:
步骤1:设置nginx保持长连接,避免前端请求超时中断,设置nginx的proxy_read_timeout 300。
Claims (7)
1.一种异步请求伪装同步请求的方法,其特征在于,包括如下步骤:
步骤S1、前端页面请求后端接口;
步骤S2、自定义异步执行器类,在此类自定义异步注解@Async,在对应业务处理类上使用@Async注解即可达到单独线程执行即异步请求的效果;
步骤S3、定义一个异步处理结果的类,此类中支持泛型T,泛型T来接收返回结果类;
步骤S3包括以下步骤:
步骤3.1:新建处理结果类Result,此Result为自定义结果公共类,包括:返回码code,返回信息msg,返回内容data,Result类专门接收处理结果;
步骤3.2:在被@Async注解的业务逻辑处理类A中的B方法里面远程调用第三方API,设置一个处理时长timeout,时间超过这个处理时长,去查询异步回调结果,如果有结果,则创建一个Result去接收处理结果;
步骤3.3:将处理后的Result类,通过自定义异步执行器E类的泛型T,来托管到E类中;
步骤3.4:将自定义异步执行器E类作为业务逻辑处理类A的返回值,return到上游调用接口;
步骤S4、在异步处理结果类中定义一个isDone方法,通过isDone方法,判断异步方法是否执行完成;
步骤S5、新建调用实例,在实例中通过判断isDone方法是否执行完成,来获对应的取返回处理结果;
步骤S6、前端获取处理结果,如果是正常结果,则按需求展示,如果结果为不正常,则请求一个单独的查询结果请求方法,此方法为补偿机制,防止未异步执行完成,就返回执行结果,同时页面出现友好提示,提示业务耐心等待;
步骤S7、设置前后端保持长连接,避免前后端请求超时中断。
2.根据权利要求1所述的一种异步请求伪装同步请求的方法,其特征在于,所述步骤S1包括以下步骤:
步骤1:新建API类,在API类中定义后端远程接口URL;
步骤2:通过远程RPC方式,调用远程后端的接口。
3.根据权利要求1所述的一种异步请求伪装同步请求的方法,其特征在于,所述步骤S2包括以下步骤:
步骤1:新建类,得到自定义异步执行器E类;
步骤2:在E类中申明一个Async注解,该注解利用项目启动时,自动注入到sping容器中,容器初始化的时候利用spring的AOP原理在被注解的方法上增加一个环绕行切面,生成一个动态代理E类,以达到单独起一个线程,单独执行;
步骤3:新建业务逻辑处理类A,并在业务逻辑类A的B方法上使用@Async来注解,这样B方法在执行时会以一个单独线程来执行,以达到异步处理的效果,B方法为要求异步调用的第三方API接口。
4.根据权利要求1所述的一种异步请求伪装同步请求的方法,其特征在于,所述步骤S4包括以下步骤:
步骤1:在自定义异步执行器E类中定义一个isDone方法,通过isDone方法来判断异步处理流程是否执行完成;
步骤2:isDone方法如果结果正常为ture,如果结果异常或结果为空则为false。
5.根据权利要求1所述的一种异步请求伪装同步请求的方法,其特征在于,所述步骤S5包括以下步骤:
步骤1:新建类C,C类为对外提供RPC服务类,同时也是业务逻辑处理类A的调用方;
步骤2:在 C类中通过判断异步执行器E的isDone()方法,判断异步处理的结果是否为ture,如果是ture则获取到返回结果,使用get()方法获取到公共结果Result,并返回给前端。
6.根据权利要求1所述的一种异步请求伪装同步请求的方法,其特征在于,所述步骤S6包括以下步骤:
步骤1:在前端页面获取返回结果Result,如果code为成功标识码,获取data数据按需求展示;
步骤2:如果code为失败,展示失败原因msg;
步骤3:如果code为未获取到数据,提供专门查询处理结果的接口来查询,同时页面展示友好提示,提示业务耐心等待。
7.根据权利要求1所述的一种异步请求伪装同步请求的方法,其特征在于,所述步骤S7包括以下步骤:
步骤1:设置nginx保持长连接,避免前端请求超时中断,设置nginx的proxy_read_timeout 300。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010615668.2A CN111752720B (zh) | 2020-06-27 | 2020-06-27 | 一种异步请求伪装同步请求方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010615668.2A CN111752720B (zh) | 2020-06-27 | 2020-06-27 | 一种异步请求伪装同步请求方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111752720A CN111752720A (zh) | 2020-10-09 |
CN111752720B true CN111752720B (zh) | 2023-07-07 |
Family
ID=72678455
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010615668.2A Active CN111752720B (zh) | 2020-06-27 | 2020-06-27 | 一种异步请求伪装同步请求方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111752720B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113434582B (zh) * | 2021-06-24 | 2023-01-03 | 平安国际智慧城市科技股份有限公司 | 业务数据处理方法、装置、计算机设备和存储介质 |
CN114928663A (zh) * | 2022-06-02 | 2022-08-19 | 蜂助手股份有限公司 | 一种识别回调报文的方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009143105A2 (en) * | 2008-05-20 | 2009-11-26 | Raytheon Company | Method and apparatus for providing a synchronous interface for an asynchronous service |
CN109656724A (zh) * | 2018-09-27 | 2019-04-19 | 深圳壹账通智能科技有限公司 | 业务处理方法、装置、设备及计算机可读存储介质 |
CN110166730A (zh) * | 2019-06-06 | 2019-08-23 | 苏州科达科技股份有限公司 | 一种请求处理方法、装置、设备及可读存储介质 |
CN110611687A (zh) * | 2018-06-15 | 2019-12-24 | 武汉安天信息技术有限责任公司 | 基于Redis的远程过程调用实现方法和相关装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7962917B2 (en) * | 2005-03-10 | 2011-06-14 | Microsoft Corporation | System data interfaces, related architectures, print system data interfaces and related print system architectures |
US8065690B2 (en) * | 2005-12-01 | 2011-11-22 | Cisco Technology, Inc. | Method and system for event-based remote procedure call implementation in a distributed computing system |
WO2007113539A1 (en) * | 2006-03-31 | 2007-10-11 | British Telecommunications Public Limited Company | Interactive development tool and debugger for web services |
US9043796B2 (en) * | 2011-04-07 | 2015-05-26 | Microsoft Technology Licensing, Llc | Asynchronous callback driven messaging request completion notification |
-
2020
- 2020-06-27 CN CN202010615668.2A patent/CN111752720B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009143105A2 (en) * | 2008-05-20 | 2009-11-26 | Raytheon Company | Method and apparatus for providing a synchronous interface for an asynchronous service |
CN110611687A (zh) * | 2018-06-15 | 2019-12-24 | 武汉安天信息技术有限责任公司 | 基于Redis的远程过程调用实现方法和相关装置 |
CN109656724A (zh) * | 2018-09-27 | 2019-04-19 | 深圳壹账通智能科技有限公司 | 业务处理方法、装置、设备及计算机可读存储介质 |
CN110166730A (zh) * | 2019-06-06 | 2019-08-23 | 苏州科达科技股份有限公司 | 一种请求处理方法、装置、设备及可读存储介质 |
Non-Patent Citations (3)
Title |
---|
"中小银行事后监督***的设计与实现";刘嫣如;中国优秀硕士学位论文全文数据库 (信息科技辑);2014年(第10期);I138-606 * |
Klaus v. Gleissenthall 等."Pretend synchrony: synchronous verification of asynchronous distributed programs".《 Proceedings of the ACM on Programming Languages》.2019,第3卷(第POPL期),1-30. * |
Thomas Herault 等."practical scalable consensus for pseudo-synchronous distributed systems".《SC'15》.2015,1-12. * |
Also Published As
Publication number | Publication date |
---|---|
CN111752720A (zh) | 2020-10-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111752720B (zh) | 一种异步请求伪装同步请求方法 | |
CN108234670B (zh) | 一种基于zookeeper和netty的分布式远程调用方法 | |
US9122520B2 (en) | Generic wait service: pausing a BPEL process | |
US20040068479A1 (en) | Exploiting asynchronous access to database operations | |
CN111212085A (zh) | 物联网平台同步调用的方法、物联网***和网络设备 | |
KR100772175B1 (ko) | 네트워크 로봇 시스템 및 네트워크 로봇 시스템에서의 통신방법 | |
CN111405130B (zh) | 一种语音交互的***及方法 | |
CN104378221A (zh) | 应用于集成电路生产线监控***的异步调用方法 | |
CN112685148B (zh) | 海量终端的异步通信方法、装置、计算机设备和存储介质 | |
US7970814B2 (en) | Method and apparatus for providing a synchronous interface for an asynchronous service | |
US20070061444A1 (en) | High availability for distributed non-persistent event propagation | |
CN112055061A (zh) | 分布式消息处理方法和设备 | |
CN114244654B (zh) | 一种url的转发方法、装置、设备及计算机存储介质 | |
CN114006946B (zh) | 同质资源请求的处理方法、装置、设备及存储介质 | |
CN115334155B (zh) | 一种消息队列代理方法和装置 | |
CN112689248A (zh) | 一种消息处理方法及*** | |
JP3406983B2 (ja) | プロセス間メッセージ通信方法 | |
CN111143085A (zh) | 一种实现多应用并发调用硬件的方法 | |
CN113992750A (zh) | 一种全局事务协同方法、装置、设备及介质 | |
US10078538B2 (en) | Web application integration with dialogue based scripts | |
CN114296809B (zh) | 一种基于操作***的对象模型构建方法及其***调用接口 | |
WO2020159089A3 (ko) | 복수의 디바이스 간 통신을 지원하는 인터페이스 관리 시스템 및 방법 | |
CN112948430B (zh) | 一种日期数据查询方法和装置 | |
CN114648411B (zh) | 一种网关服务一键发布方法、***及存储介质 | |
CN114090836A (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 |