如果想要通过一个微服务来调用另外一个微服务的API,如果纯原生的话,比较麻烦,如果同时需要处理多个请求的话,会涉及到负载均衡的问题,所以,OpenFeign这个强大的工具出现了。它为微服务架构下服务之间的调用提供了解决方案。首先,利用OpenFeign的声明式方式可以定义Web服务客户端;其次,进一步通过继承Ribbon 或 Eureka来实现负载均衡的HTTP客户端。
OK,理论知识大家可以再学习学习,现在我们开始实战操作。
本次,我们来学习如何引入Open Feign,以及如何使用OpenFeign 来进行API访问。
1、我们首先在一个微服务,名叫user-service中定义一个api接口:
2、右键在根项目中添加一个模块,为:feign-service,添加依赖为:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
3、因为OpenFeign是通过接口的方式来进行api访问,所以,我们需要先新建一个访问user-service中controller的/getuserapi接口的interface。
其中:@FeignClient中value值定义了所需要访问的微服务的名称(注册在eureka中的名称),然后通过注解@RequestMapping()注解,来访问user-service中的getuserapi接口的controller。
4、OK,通过上面的注解,即声明了接口访问的方式,那么,接下来就可以使用这个接口了。
我们在当前的feign-service中顶一个一个controller,用来调用接口。
而@RequestMapping注解则表示在浏览器访问的时候所需要提供的url。
5、OK,那我们先启动user-service,再启动feign-service,来验证一下是否可以成功访问。
地址栏输入:http://localhost:8003/getuserapi
结果:
6、OK,到目前为止,我们已经可以通过OpenFeign来调用其他微服务的api了。不过暂时都是无参调用,有参调用的可以后面继续学习。其实OpenFeign最核心的思想就是让当前的微服务将要调用的微服务的api像调用本微服务的接口或者函数一样简单。简化微服务之间的调用过程,同时可以实现复杂均衡!
OK,本节就到此结束了,下一节继续学习!