介绍编写接口作为服务调用入口
调用服务
关于调用https接口
本篇文章给大家分享的是有关怎么在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中利用假装调用其他服务接口