CN115134396A - 服务的调用方法、装置、电子设备及存储介质 - Google Patents
服务的调用方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN115134396A CN115134396A CN202210732688.7A CN202210732688A CN115134396A CN 115134396 A CN115134396 A CN 115134396A CN 202210732688 A CN202210732688 A CN 202210732688A CN 115134396 A CN115134396 A CN 115134396A
- Authority
- CN
- China
- Prior art keywords
- service
- request
- target service
- network request
- client
- 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.)
- Withdrawn
Links
- 238000000034 method Methods 0.000 title claims abstract description 79
- 230000000903 blocking effect Effects 0.000 claims abstract description 70
- 238000004891 communication Methods 0.000 claims abstract description 55
- 230000004044 response Effects 0.000 claims abstract description 21
- 238000004590 computer program Methods 0.000 claims description 20
- 230000004907 flux Effects 0.000 claims description 10
- 238000010276 construction Methods 0.000 claims description 2
- 238000002054 transplantation Methods 0.000 abstract description 4
- 238000010586 diagram Methods 0.000 description 13
- 230000008569 process Effects 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 230000007246 mechanism Effects 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 238000005538 encapsulation Methods 0.000 description 3
- 235000010627 Phaseolus vulgaris Nutrition 0.000 description 2
- 244000046052 Phaseolus vulgaris Species 0.000 description 2
- 238000002372 labelling Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请公开了一种服务的调用方法、装置、电子设备及存储介质。服务的调用方法,包括:接收目标服务的访问请求;根据访问请求,通过伪通信服务客户端获得目标服务的请求信息;根据目标服务的请求信息,通过响应式的非阻塞的网络请求客户端构建网络请求;将网络请求发送给目标服务,并获得目标服务对网络请求的执行结果,网络请求用于触发目标服务执行访问请求。本申请实施例,采用响应式的非阻塞的网络请求客户端,但是能解析伪通信服务中注解的通信方式,不但可以降低开发者对响应式的非阻塞的网络请求客户端的学习成本,还可以提高代码的复用性,减少移植和版本升级后产生的问题,使微服务架构中路由服务能使用伪通信服务远程调用微服务。
Description
技术领域
本申请涉及通信技术领域,尤其涉及一种服务的调用方法、装置、电子设备及存储介质。
背景技术
目前,随着微服务架构(Springcloud)版本的升级,微服务架构中的路由服务(springgateway)在使用伪通信服务(feign)实现微服务调用时,伪通信服务可能不能正常启动,一直处于阻塞状态。由于feign本身是非响应式编程实现的,而路由服务是响应式编程实现的,所以,路由服务不支持使用伪通信服务远程调用微服务的方式。
相关技术中,虽然可以采用重新封装所有请求的方式来实现微服务的远程调用,但是在项目升级后,原来的微服务调用接口需要进行大量的修改,费时费力,而且修改过程中还可能会出错,此外,响应式编程对多数程序开发人员来说比较陌生,学习成本较高。
发明内容
鉴于现有技术中的上述缺陷或不足,期望提供一种服务的调用方法、装置、电子设备及存储介质,采用响应式的非阻塞的网络请求客户端,但是能解析伪通信服务中注解的通信方式,不但可以降低开发者对响应式的非阻塞的网络请求客户端的学习成本,还可以提高代码的复用性,减少移植和版本升级后产生的问题,使微服务架构(Springcloud)中路由服务(springgateway)能使用伪通信服务(feign)远程调用微服务。
第一方面,本申请实施例提供了一种服务的调用方法,包括:
接收目标服务的访问请求;
根据所述访问请求,通过伪通信服务客户端获得目标服务的请求信息;
根据所述目标服务的请求信息,通过响应式的非阻塞的网络请求客户端构建网络请求;
将所述网络请求发送给所述目标服务,并获得所述目标服务对所述网络请求的执行结果,其中,所述网络请求用于触发所述目标服务执行所述访问请求。
在一些示例中,所述根据所述访问请求,通过伪通信服务客户端获得目标服务的请求信息,包括:
从伪通信服务客户端中获得调用服务注解的接口;
根据调用服务注解的接口生成动态代理实例;
根据所述访问请求,调用所述动态代理实例的方法;
根据所述方法的注解、所述方法中参数的注解,得到所述目标服务的请求信息。
在一些示例中,所述根据所述目标服务的请求信息,通过响应式的非阻塞的网络请求客户端构建网络请求,包括:
添加所述响应式的非阻塞的网络请求客户端的实体类;
根据所述响应式的非阻塞的网络请求客户端的实体类创建响应式的非阻塞的网络请求客户端的实体对象;
根据所述目标服务的请求信息,通过所述响应式的非阻塞的网络请求客户端的实体对象构建所述网络请求。
在一些示例中,所述添加所述响应式的非阻塞的网络请求客户端的实体类,包括:
根据组件扫描注解获得扫描路径;
从所述扫描路径中扫描所述响应式的非阻塞的网络请求客户端的实体类。
在一些示例中,所述响应式的非阻塞的网络请求客户端为webClient客户端。
在一些示例中,在获得所述目标服务对所述网络请求的执行结果之前,还包括:
将所述调用服务注解的接口的方法的返回值设置为reactor的mono对象或者Flux对象。
第二方面,本申请实施例提供一种服务的调用装置,包括:
接收模块,用于接收目标服务的访问请求;
获取模块,用于根据所述访问请求,通过伪通信服务客户端获得目标服务的请求信息;
构建模块,用于根据所述目标服务的请求信息,通过响应式的非阻塞的网络请求客户端构建网络请求;
调用模块,用于将所述网络请求发送给所述目标服务,并获得所述目标服务对所述网络请求的执行结果,其中,所述网络请求用于触发所述目标服务执行所述访问请求。
在一些示例中,所述获取模块,具体用于:
从伪通信服务客户端中获得调用服务注解的接口;
根据调用服务注解的接口生成动态代理实例;
根据所述访问请求,调用所述动态代理实例的方法;
根据所述方法的注解、所述方法中参数的注解,得到所述目标服务的请求信息。
在一些示例中,所述构建模块,具体用于:
添加所述响应式的非阻塞的网络请求客户端的实体类;
根据所述响应式的非阻塞的网络请求客户端的实体类创建响应式的非阻塞的网络请求客户端的实体对象;
根据所述目标服务的请求信息,通过所述响应式的非阻塞的网络请求客户端的实体对象构建所述网络请求。
在一些示例中,所述添加所述响应式的非阻塞的网络请求客户端的实体类,包括:
根据组件扫描注解获得扫描路径;
从所述扫描路径中扫描所述响应式的非阻塞的网络请求客户端的实体类。
在一些示例中,所述响应式的非阻塞的网络请求客户端为webClient客户端。
在一些示例中,在获得所述目标服务对所述网络请求的执行结果之前,还包括:
将所述调用服务注解的接口的方法的返回值设置为reactor的mono对象或者Flux对象。
第三方面,本申请实施例提供一种电子设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,该处理器执行该程序时实现如上述第一方面所述的服务的调用方法。
第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序用于实现如上第一方面所述的服务的调用方法。
第五方面,本申请实施例提供一种计算机程序产品,其上存储有计算机程序,该计算机程序用于实现如上第一方面所述的服务的调用方法。
本申请实施例提供的服务的调用方法、装置、电子设备及存储介质,通过伪通信服务客户端(feignClient)获得目标服务的请求信息,并根据目标服务的请求信息,通过响应式的非阻塞的网络请求客户端构建网络请求,最后将网络请求发送给目标服务,并获得目标服务对网络请求的执行结果,通过封装解析伪通信服务(feign)的注解和封装反应式编程的网络请求,即:一种底层采用采用响应式的非阻塞的网络请求客户端,但是能解析伪通信服务中注解的通信方式,不但可以降低开发者对响应式的非阻塞的网络请求客户端的学习成本,还可以提高代码的复用性,减少移植和版本升级后产生的问题,使微服务架构(Springcloud)中路由服务(springgateway)能使用伪通信服务(feign)远程调用微服务。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1为本申请实施例的服务的调用方法的流程图;
图2为本申请实施例的服务的调用方法中feign的接口和注解的示意图;
图3为本申请实施例的服务的调用方法的远程调用目标微服务的过程示意图;
图4为本申请实施例的服务的调用方法的feign的原有接口返回值类型的示意图;
图5为本申请实施例的服务的调用方法的feign的修改后接口返回值类型的示意图;
图6为本申请实施例的服务的调用装置的结构框图;
图7为本申请实施例的电子设备的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关公开,而非对该公开的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与公开相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
以下结合附图描述根据本发明实施例的服务的调用方法、装置、电子设备及存储介质。
图1是本申请一个实施例的服务的调用方法的流程图,如图1所示,根据本申请实一个实施例的服务的调用方法,包括如下步骤:
S101:接收目标服务的访问请求。
目标服务例如为微服务,其中,微服务通常指一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。
另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。从技术维度来说:微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是一种小而独立的处理过程,类似进程概念,能够自行单独启动或销毁,拥有自己独立的数据库。
本发明的服务的调用方法可以通过一个通信插件实现,当一个项目(服务)远程访问一个目标微服务时,可以通过该通信插件实现,通信插件接收该项目(服务)向目标微服务的访问请求。具体来说,在项目(服务)中引入插件,例如:在微服务架构如Springcloud中的Springboot项目(服务)的Pom.xml文件中引入如下的Maven依赖,即:引入通信插件。
<dependency>
<groupId>com.boe.middleware</groupId>
<artifactId>FeignReactorPlugin</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>。
当然,在项目中引入通信插件之前,可以利用springspi机制,在创建的通信插件的项目的Resource/META-INF目录下添加spring.factories文件,并指定通信插件需要加载的自动配置类,例如:引入FeignReactorAutoConfiguratio自动配置类。作为一个具体的示例:FeignReactorAutoConfiguratio自动配置类的示例如图2所示。
此外,还需要在FeignReactorAutoConfiguratio自动配置类上添加组件扫描注解(如@ComponentScan注解),这样,在项目进行扫描的时候,将可以自动扫描通信插件的包下的所有bean(即:类),其中,扫描到的类例如包括:FeignAnalysis类、FeignReactorClient类和FeignReactorProxy类。
其中,FeignAnalysis类为解析feign注解的核心类。该类会通过spring获取项目中所有包含调用服务注解的接口。然后读取接口中各个方法上的注解,包括请求头,请求方式,请求参数信息。最后,将这些注解信息存到缓存中。
FeignReactorClient类为生成动态代理核心类。利用java的动态代理技术,将这些包含调用服务(如@FeignClient)注解的接口进行动态代理。并将代理后的实例放入spring容器中。
FeignReactorProxy类为动态代理的具体逻辑,创建反应式微服务通信的核心类。利用缓存中获取的请求方式,请求头,请求体,请求参数,通过响应式的非阻塞的网络请求客户端例如webClinet客户端构建http请求(即:网络请求,也称为web请求),与目标微服务进行通信,并返回通过reactor的Mono或Flux封装后的结果。
当然,在FeignReactorAutoConfiguration类的内部,还需要添加webBuilder方法,用于向spring容器中自动注入响应式的非阻塞的网络请求客户端例如webClinet客户端的builder实例。并且,通过添加@LoadBalanced注解后,使响应式的非阻塞的网络请求客户端例如webClinet客户端可以支持负载均衡。如图3所示,在项目(服务)启动后,springspi机制加载通信插件;扫描通信插件的包下所有bean,然后自动添加响应式的非阻塞的网络请求客户端例如webClinet客户端实体类。其中,添加的响应式的非阻塞的网络请求客户端的实体类,包括:根据组件扫描注解获得扫描路径;从所述扫描路径中扫描所述响应式的非阻塞的网络请求客户端的实体类。
S102:根据访问请求,通过伪通信服务客户端(如feign客户端)获得目标服务的请求信息。
用户使用spring服务(项目)时,通信插件根据访问请求,通过伪通信服务客户端如feign客户端获得目标服务的请求信息,包括:从feign客户端中获得调用服务(如@feignClient)注解的接口;根据@feignClient注解的接口生成动态代理实例;根据所述访问请求,调用所述动态代理实例的方法;根据所述方法的注解、所述方法中参数的注解,得到所述目标服务的请求信息。结合图3所示,从spring项目中获取所有添加@feignClient注解的接口信息,将这些接口利用Java动态代理技术,生成动态代理实例,然后,将动态代理实例放入spring容器中,如果接口中还有方法,则读取方法上的注解,方法中的参数的注解,将注解的值和类型封装成FeignAnnotations实体类,并对请求头、请求方式、请求地址赋值。把FeignAnnotations实体类放入缓存中。用户使用spring服务时,利用spring自动注入机制,注入feignClient的动态代理实例,然后根据访问请求调用feignClient接口中的某个方法,将进入Java动态代理的逻辑中。
S103:根据目标服务的请求信息,通过响应式的非阻塞的网络请求客户端构建网络请求。
具体地,根据目标服务的请求信息,通过响应式的非阻塞的网络请求客户端构建网络请求,包括:添加所述响应式的非阻塞的网络请求客户端的实体类;根据所述响应式的非阻塞的网络请求客户端的实体类创建响应式的非阻塞的网络请求客户端的实体对象;根据所述目标服务的请求信息,通过所述响应式的非阻塞的网络请求客户端的实体对象构建所述网络请求。结合图3所示,进入Java动态代理的逻辑之后,根据feignClient的全限定名、从FeignAnnotationMap中获取对应的请求信息,利用请求信息通过响应式的非阻塞的网络请求客户端实体类构建网络请求。
S104:将网络请求发送给目标服务,并获得目标服务对网络请求的执行结果,其中,网络请求用于触发目标服务执行访问请求。
需要说明的是,在获得目标服务对网络请求的执行结果之前,还包括:将@feignClient注解的接口的方法的返回值设置为reactor的mono对象或者Flux对象。即:将feign中原有的请求返回类型改为reactor模式,即用mono或Flux封装原接口返回值。其中mono表示返回某个对象。Flux表示返回一组对象。
如图4所示,feign中原有接口的返回值类型为:UserloginBean和List<UserMicoDeailBean>。其中,feign中,MyUserInfoClient表示接口,@GetMapping标注的是目标微服务的地址、getUserByToekn以及getUserDeatils表示接口中的方法,@RequestParam标注和@RequestBody表示请求的目标微服务提供的方法。如图5所示,feign中修改后的接口的返回值类型为:Mono<UserloginBean>和Flux<UserMicoDeailBean>。
如图3所示,在利用请求信息通过响应式的非阻塞的网络请求客户端实体类构建网络请求之后,将网络请求发送给目标微服务,目标微服务执行@RequestParam标注和@RequestBody标注的方法后,返回Mono或者Flux对象。
在以上描述中,webclient在spring5中,出现了reactive响应式编程思想,并且为网络编程提供相关响应式编程的支持,如提供webflux,是spring提供的异步非阻塞的响应式的网络框架,可以充分利用多cpu并行处理一些功能,虽然不能提高单个请求的响应能力,但是总体可以提高多核的服务器性能,提高系统吞吐量和伸缩性,特别适合于i/o密集型服务,webflux对应的是老式的sevlet的阻塞式服务容器。而webclient提供的基于响应式的非阻塞的网络请求客户端,对应的是老式的restTemplate这类,相对于老式的restTemplate,不阻塞代码、异步执行。Webclient的执行流程是先创建个webclient.create()实例,之后调用get(),pos()等调用方式,url()指定路径,retrieve()用来发起请求并获得响应,bodyToMono(String.class)用来指定请求结果需要处理为String,并包装为Reactor的Mono对象等。
根据本发明实施例的服务的调用方法,通过伪通信服务客户端获得目标服务的请求信息,并根据目标服务的请求信息,通过响应式的非阻塞的网络请求客户端构建网络请求,最后将网络请求发送给目标服务,并获得目标服务对网络请求的执行结果,通过封装解析feign的注解和封装反应式编程的网络请求,即:一种底层采用响应式的非阻塞的网络请求客户端,但是能解析伪通信服务中注解的通信方式,不但可以降低开发者对响应式的非阻塞的网络请求客户端的学习成本,还可以提高代码的复用性,减少移植和版本升级后产生的问题,使微服务架构(Springcloud)中路由服务(springgateway)能使用伪通信服务(feign)远程调用微服务。
图6是根据本发明一个实施例的服务的调用装置的结构框图。如图6所示,根据本发明一个实施例的服务的调用装置,包括:接收模块610、获取模块620、构建模块630和调用模块640,其中:
接收模块610,用于接收目标服务的访问请求;获取模块620,用于根据所述访问请求,通过伪通信服务客户端获得目标服务的请求信息;构建模块630,用于根据所述目标服务的请求信息,通过响应式的非阻塞的网络请求客户端构建网络请求;调用模块640,用于将所述网络请求发送给所述目标服务,并获得所述目标服务对所述网络请求的执行结果,其中,所述网络请求用于触发所述目标服务执行所述访问请求。
在本发明的一个实施例中,获取模块,具体用于:
从伪通信服务客户端中获得调用服务注解的接口;
根据调用服务注解的接口生成动态代理实例;
根据所述访问请求,调用所述动态代理实例的方法;
根据所述方法的注解、所述方法中参数的注解,得到所述目标服务的请求信息。
在本发明的一个实施例中,所述构建模块,具体用于:
添加所述响应式的非阻塞的网络请求客户端的实体类;
根据所述响应式的非阻塞的网络请求客户端的实体类创建响应式的非阻塞的网络请求客户端的实体对象;
根据所述目标服务的请求信息,通过所述响应式的非阻塞的网络请求客户端的实体对象构建所述网络请求。
在本发明的一个实施例中,所述添加所述响应式的非阻塞的网络请求客户端的实体类,包括:
根据组件扫描注解获得扫描路径;
从所述扫描路径中扫描所述响应式的非阻塞的网络请求客户端的实体类。
在本发明的一个实施例中,所述响应式的非阻塞的网络请求客户端为webClient客户端。
在本发明的一个实施例中,在获得所述目标服务对所述网络请求的执行结果之前,还包括:
将所述调用服务注解的接口的方法的返回值设置为reactor的mono对象或者Flux对象。
根据本发明实施例的服务的调用装置,通过伪通信服务客户端获得目标服务的请求信息,并根据目标服务的请求信息,通过响应式的非阻塞的网络请求客户端构建网络请求,最后将网络请求发送给目标服务,并获得目标服务对网络请求的执行结果,通过封装解析feign的注解和封装反应式编程的网络请求,即:一种底层采用响应式的非阻塞的网络请求客户端,但是能解析伪通信服务中注解的通信方式,不但可以降低开发者对响应式的非阻塞的网络请求客户端的学习成本,还可以提高代码的复用性,减少移植和版本升级后产生的问题,使微服务架构(Springcloud)中路由服务(springgateway)能使用伪通信服务(feign)远程调用微服务。
需要说明的是,本申请实施例的服务的调用装置的具体实现方式与本申请实施例的服务的调用方法的具体实现方式类似,具体请参见方法部分的描述,此处不做赘述。
图7为本申请实施例的电子设备的结构示意图。
如图7所示,电子设备700包括中央处理单元(CPU)701,其可以根据存储在只读存储器(ROM)702中的程序或者从存储部分702加载到随机访问存储器(RAM)703中的程序而执行各种适当的动作和处理。在RAM 703中,还存储有电子设备700操作所需的各种程序和数据。CPU 701、ROM702以及RAM 703通过总线704彼此相连。输入/输出(I/O)接口705也连接至总线704。
以下部件连接至I/O接口705:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至I/O接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便于从其上读出的计算机程序根据需要被安装入存储部分708。
特别地,根据本申请的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在机器可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。在该计算机程序被中央处理单元(CPU)701执行时,执行本申请的电子设备中限定的上述功能。
需要说明的是,本申请所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的电子设备、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行电子设备、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行电子设备、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的处理接收设备、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,前述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的电子设备来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元或模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元或模块也可以设置在处理器中,处理器用于执行所述程序时实现服务的调用方法:接收目标服务的访问请求;根据所述访问请求,通过伪通信服务客户端获得目标服务的请求信息;根据所述目标服务的请求信息,通过响应式的非阻塞的网络请求客户端构建网络请求;将所述网络请求发送给所述目标服务,并获得所述目标服务对所述网络请求的执行结果,其中,所述网络请求用于触发所述目标服务执行所述访问请求。
作为另一方面,本申请还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中的。上述计算机可读存储介质存储有一个或者多个程序,当上述前述程序被一个或者一个以上的处理器用来执行描述于本申请的服务的调用方法:接收目标服务的访问请求;根据所述访问请求,通过伪通信服务客户端获得目标服务的请求信息;根据所述目标服务的请求信息,通过响应式的非阻塞的网络请求客户端构建网络请求;将所述网络请求发送给所述目标服务,并获得所述目标服务对所述网络请求的执行结果,其中,所述网络请求用于触发所述目标服务执行所述访问请求。
作为另一方面,本申请还提供了一种计算机程序产品,该计算机程序产品可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中的。上述计算机程序产品存储有一个或者多个程序,当上述前述程序被一个或者一个以上的处理器用来执行描述于本申请的服务的调用方法:接收目标服务的访问请求;根据所述访问请求,通过伪通信服务客户端获得目标服务的请求信息;根据所述目标服务的请求信息,通过响应式的非阻塞的网络请求客户端构建网络请求;将所述网络请求发送给所述目标服务,并获得所述目标服务对所述网络请求的执行结果,其中,所述网络请求用于触发所述目标服务执行所述访问请求。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离前述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
Claims (10)
1.一种服务的调用方法,其特征在于,包括:
接收目标服务的访问请求;
根据所述访问请求,通过伪通信服务客户端获得目标服务的请求信息;
根据所述目标服务的请求信息,通过响应式的非阻塞的网络请求客户端构建网络请求;
将所述网络请求发送给所述目标服务,并获得所述目标服务对所述网络请求的执行结果,其中,所述网络请求用于触发所述目标服务执行所述访问请求。
2.根据权利要求1所述的服务的调用方法,其特征在于,所述根据所述访问请求,通过伪通信服务客户端获得目标服务的请求信息,包括:
从伪通信服务客户端中获得调用服务注解的接口;
根据调用服务注解的接口生成动态代理实例;
根据所述访问请求,调用所述动态代理实例的方法;
根据所述方法的注解、所述方法中参数的注解,得到所述目标服务的请求信息。
3.根据权利要求1或2所述的服务的调用方法,其特征在于,所述根据所述目标服务的请求信息,通过响应式的非阻塞的网络请求客户端构建网络请求,包括:
添加所述响应式的非阻塞的网络请求客户端的实体类;
根据所述响应式的非阻塞的网络请求客户端的实体类创建响应式的非阻塞的网络请求客户端的实体对象;
根据所述目标服务的请求信息,通过所述响应式的非阻塞的网络请求客户端的实体对象构建所述网络请求。
4.根据权利要求3所述的服务的调用方法,其特征在于,所述添加所述响应式的非阻塞的网络请求客户端的实体类,包括:
根据组件扫描注解获得扫描路径;
从所述扫描路径中扫描所述响应式的非阻塞的网络请求客户端的实体类。
5.根据权利要求3所述的服务的调用方法,其特征在于,所述响应式的非阻塞的网络请求客户端为webClient客户端。
6.根据权利要求2所述的服务的调用方法,其特征在于,在获得所述目标服务对所述网络请求的执行结果之前,还包括:
将所述调用服务注解的接口的方法的返回值设置为reactor的mono对象或者Flux对象。
7.一种服务的调用装置,其特征在于,包括:
接收模块,用于接收目标服务的访问请求;
获取模块,用于根据所述访问请求,通过伪通信服务客户端获得目标服务的请求信息;
构建模块,用于根据所述目标服务的请求信息,通过响应式的非阻塞的网络请求客户端构建网络请求;
调用模块,用于将所述网络请求发送给所述目标服务,并获得所述目标服务对所述网络请求的执行结果,其中,所述网络请求用于触发所述目标服务执行所述访问请求。
8.一种电子设备,其特征在于,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器用于执行所述程序时实现根据权利要求1-6任一项所述的服务的调用方法。
9.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序用于实现根据权利要求1-6任一项所述的服务的调用方法。
10.一种计算机程序产品,其特征在于,其上存储有计算机程序,所述计算机程序用于实现根据权利要求1-6任一项所述的服务的调用方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210732688.7A CN115134396A (zh) | 2022-06-24 | 2022-06-24 | 服务的调用方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210732688.7A CN115134396A (zh) | 2022-06-24 | 2022-06-24 | 服务的调用方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115134396A true CN115134396A (zh) | 2022-09-30 |
Family
ID=83379954
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210732688.7A Withdrawn CN115134396A (zh) | 2022-06-24 | 2022-06-24 | 服务的调用方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115134396A (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108446111A (zh) * | 2018-03-26 | 2018-08-24 | 国家电网公司客户服务中心 | 一种基于Spring cloud的微服务构建方法 |
CN110381135A (zh) * | 2019-07-18 | 2019-10-25 | 北京奇艺世纪科技有限公司 | 接口创建方法、服务请求方法、装置、计算机设备和介质 |
CN110971449A (zh) * | 2019-10-25 | 2020-04-07 | 武汉烽火众智数字技术有限责任公司 | 一种基于微服务架构的服务管控系统 |
CN111193803A (zh) * | 2019-12-31 | 2020-05-22 | 四川省公安科研中心 | 基于spring cloud的微服务构建方法及spring cloud微服务架构 |
CN112929210A (zh) * | 2021-01-25 | 2021-06-08 | 城云科技(中国)有限公司 | 在WebFlux框架搭建的网关路由应用插件的方法、系统及其应用 |
CN113141365A (zh) * | 2021-04-23 | 2021-07-20 | 中国工商银行股份有限公司 | 分布式微服务数据传输的方法、装置、系统和电子设备 |
-
2022
- 2022-06-24 CN CN202210732688.7A patent/CN115134396A/zh not_active Withdrawn
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108446111A (zh) * | 2018-03-26 | 2018-08-24 | 国家电网公司客户服务中心 | 一种基于Spring cloud的微服务构建方法 |
CN110381135A (zh) * | 2019-07-18 | 2019-10-25 | 北京奇艺世纪科技有限公司 | 接口创建方法、服务请求方法、装置、计算机设备和介质 |
CN110971449A (zh) * | 2019-10-25 | 2020-04-07 | 武汉烽火众智数字技术有限责任公司 | 一种基于微服务架构的服务管控系统 |
CN111193803A (zh) * | 2019-12-31 | 2020-05-22 | 四川省公安科研中心 | 基于spring cloud的微服务构建方法及spring cloud微服务架构 |
CN112929210A (zh) * | 2021-01-25 | 2021-06-08 | 城云科技(中国)有限公司 | 在WebFlux框架搭建的网关路由应用插件的方法、系统及其应用 |
CN113141365A (zh) * | 2021-04-23 | 2021-07-20 | 中国工商银行股份有限公司 | 分布式微服务数据传输的方法、装置、系统和电子设备 |
Non-Patent Citations (1)
Title |
---|
永远不放开: "自己简单实现feign-reactive的基本功能", pages 1 - 5, Retrieved from the Internet <URL:https://blog.csdn.net/weixin_38560512/article/details/121499498> * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111737032B (zh) | 一种基于微内核系统的子程序运行方法、装置和电子设备 | |
US7698684B2 (en) | Method and system for generating schema to Java mapping descriptors and direct mapping of XML schema and Java interfaces | |
CA2316003C (en) | Accessing legacy applications from the internet | |
Indrasiri et al. | gRPC: up and running: building cloud native applications with Go and Java for Docker and Kubernetes | |
EP2307977B1 (en) | System and method for dynamic partitioning of applications in client-server environments | |
US9454616B2 (en) | Method and system for unifying configuration descriptors | |
US7174361B1 (en) | Scripting task-level user-interfaces | |
US8250522B2 (en) | Method and system for generating a web services meta model on the java stack | |
US7673028B2 (en) | Method and system for container-managed configuration and administration | |
US20070169015A1 (en) | Web services development automation toolkit with test case driver and customized configuration file | |
US9058571B2 (en) | Tool for automated transformation of a business process definition into a web application package | |
US8700681B2 (en) | Method and system for generating schema to java mapping descriptors | |
US20070067418A1 (en) | Object oriented web application framework | |
US8615750B1 (en) | Optimizing application compiling | |
US20030167355A1 (en) | Application program interface for network software platform | |
US20060150188A1 (en) | Method and apparatus for supporting soft real-time behavior | |
KR20160061305A (ko) | 커스터마이징된 소프트웨어 개발 키트(sdk) 생성을 위한 방법 및 장치 | |
US20080301629A1 (en) | Integrating aspect oriented programming into the application server | |
US20140059172A1 (en) | Remote portlet consumer with enhanced resource url processing | |
KR20060111349A (ko) | 프로그램 프래그먼트를 공유하는 프로세스 및 시스템 | |
CN113360377A (zh) | 一种测试方法和装置 | |
US10268496B2 (en) | System and method for supporting object notation variables in a process defined by a process execution language for execution in a SOA middleware environment | |
US10223143B2 (en) | System and method for supporting javascript as an expression language in a process defined by a process execution language for execution in a SOA middleware environment | |
CN113535419A (zh) | 一种服务编排方法和装置 | |
CN115134396A (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 | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20220930 |