怎么在SpringBoot中利用假装调用其他服务接口

  介绍

本篇文章给大家分享的是有关怎么在SpringBoot中利用假装调用其他服务接口,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

引入依赖

& lt; !——, https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign ——比;   & lt; dependency>   ,& lt; groupId> org.springframework.cloud   ,& lt; artifactId> spring-cloud-starter-openfeign   ,& lt; version> 2.0.4.RELEASE   & lt;/dependency>

引入SpringBoot打包的假装依赖,需要注意的是假装的版本与SpringBoot版本的对应关系,老版本的假装并不叫openfeign。由于我是用的SpringBoot版本是2.0倍,所以openfeign使用了2.0 x版本,若使用诸如2.1 x或其他高版本的openfeign,在项目启动时会报“抽象方法错误”这类的异常。

编写接口作为服务调用入口

import  com.bhz.demo.client.domain.req.ProductReceiveReq;   import  com.bhz.demo.client.domain.resp.MemberPointBaseResp;   import  com.bhz.demo.client.domain.resp.UserPointResp;   import  org.springframework.cloud.openfeign.FeignClient;   import  org.springframework.web.bind.annotation.PathVariable;   import  org.springframework.web.bind.annotation.RequestMapping;   import  org.springframework.web.bind.annotation.RequestMethod;/* *   ,* @Author  guomz    ,* @create  2021/3/15  14:50    ,*/@FeignClient (=url “www.123.com",, name =,“demoClient")   public  interface  DemoClient  {      @RequestMapping才能(value =,“/演示/user/{uuid}/{名称},,,method =, RequestMethod.GET)   DemoBaseResp<才能;DemoUserResp>, getUser (@PathVariable (“uuid"), String  uuid、, @PathVariable (“name"), String 名称);   ,,   @RequestMapping才能(value =,“/演示/buy",, method =, RequestMethod.POST)   DemoBaseResp 才能buyProduct (DemoBuyReq 要求);   }

假装的服务调用编写类似mybatis的刀接口,接口上方需要标注@FeignClient注解,该注解有url,名称,值三个重要参数。其中名称与值等效,必须填写一个。在微服务环境下的名称或值填写用于被注册中心发现的服务名,例如调用的用户服务叫userService则此处填写userService,此使url可以不填写,因为已经指定了调用方.url则是直接指定服务的全路径,若同时填写url与名称,则以url为准,名字便被当作当前客户端的名称。

上面的示例并不属于复杂的微服务环境,所以采用直接指定url来调用其他服务。

方法定义上与控制器基本一致,需要注意发布方法不能传递多个参数,需要用地图或对象进行封装。

调用服务

@ service   @Slf4j   public  class  DemoService  {   ,@ autowired   ,private  DemoClient  demoClient;   ,public  void  getUser (Long  id) {   ,,,demoClient.getUser (“123”,,,“abc");   ,}   }

在需要调用其他服务的模块中引入之前定义的接口即可。

关于调用https接口

调用https接口时会进行证书校验,若没有证书则会抛出无标题选择名字出现异常,可以使用以下代码来绕过证书校验:

& lt; !——, https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-ribbon ——比;   & lt; dependency>   ,& lt; groupId> org.springframework.cloud   ,& lt; artifactId> spring-cloud-starter-netflix-ribbon   ,& lt; version> 2.0.4.RELEASE   & lt;/dependency>

首先需要引入带依赖,在绕过证书的代码中存在一些需要被注入的类属于Ribbon.Ribbon的引入同样需要注意版本问题。

import  feign.Client;   import  org.springframework.beans.factory.annotation.Qualifier;   import  org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;   import  org.springframework.cloud.netflix.ribbon.SpringClientFactory;   import  org.springframework.cloud.openfeign.ribbon.CachingSpringLoadBalancerFactory;   import  org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient;   import  org.springframework.context.annotation.Bean;   import  org.springframework.context.annotation.Configuration;   import  javax.net.ssl。*;   import  java.security.KeyManagementException;   import  java.security.NoSuchAlgorithmException;   import  java.security.cert.X509Certificate;/* * feign 客户配置   ,* @Author  guomz   ,* @create  2021/3/16  9:52   ,*/,@ configuration   public  class  FeignConfiguration  {/* *   ,*调用https接口时绕过ssl证书验证   ,* @param  cachingFactory   ,* @param  clientFactory   ,* @return   ,* @throws  NoSuchAlgorithmException   ,* @throws  KeyManagementException   ,*/,@ bean   ,@ConditionalOnMissingBean  public  Client  feignClient (@ qualifier (“cachingLBClientFactory"), CachingSpringLoadBalancerFactory  cachingFactory,, SpringClientFactory  clientFactory), throws  NoSuchAlgorithmException, KeyManagementException  {   ,,,SSLContext  ctx =, SSLContext.getInstance (“TLSv1.2");   ,,,X509TrustManager  tm =, new  X509TrustManager (), {   ,,,,,,@Override   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在SpringBoot中利用假装调用其他服务接口