首先,整个课程系列需要同学们有一定的基础技能,分别是java、springboot、github以及基础的Linux的知识,其中springboot是各位同学一定要掌握的,如果没有springboot基础可以查看我之前的博客对 java 搭建基于springboot的ssm(spring + springmvc + mybatis)的maven项目和 java 搭建基于springboot的ssh(spring + springmvc + hibernate)的gradle项目(基础篇) 进行学习,关于github以及Linux方面可以在使用到的时候再进行学习以及准备。
经过前面的三篇文章,已经将大体的准备工作完成,接下来我们继续讲Feign添加到我们的框架中。
1. Feign简介
Feign包含了Ribbon和Hystrix,它的主要作用是实现服务之间的调用,虽然使用Ribbon+Hystrix也能实现服务间的调用,但是代码实在是过于丑陋,所以我们要使用Feign实现服务间的调用,让我们的代码简洁起来,需要注意的是Feign使用的是伪RPC的模式,即http的rest风格进行服务间的调用,这与Dubbo是有所区别的。这里就不过多介绍http与rpc的区别了。同学们可以自己百度查看,简单来说http开发简洁迭代快,rpc效率高。
2.Feign搭建
2.1 环境准备
开发工具:idea
开发环境:JDK8
spring boot 版本: 2.0.3
构建工具: gradle4.5(因为springboot使用2.0所以gradle要使用4.0以上版本)
2.2 项目改造
我们来使用我们之前项目创建好的eureka以及clientone和clinettwo,我们来使用Feign实现clientone调用clienttwo的接口,不清楚项目搭建过程的可以查看我之前的springcloud系列,首先开启eureka、clientone以及clienttwo,如下图所示
接下来我们对clientone和clienttwo进行改造,改造过程一样,我们这里仅对clientone的改造进行介绍。
1.添加Feign依赖
//添加feign依赖
compile('org.springframework.cloud:spring-cloud-starter-openfeign')
2.打开Feign开关
好了,改造完成。clienttwo的改造方式和上面一样,是不是很简单,其实主要还是Feign对Ribbon和Hystrix进行了包装,才会让我们的服务间调用变得如此简单,接下来我们来看一下如何通过clientone来调用clienttwo的接口。
2.3 服务间调用
改造clienttwo
首先,我们在clienttwo中提供一个getInfo接口,如下图所示。
改造clientone
我们现在通过clientone使用feign来调用clienttwo的getinfo方法
现在我们来访问clientone中的hello/get/two/info接口,得到如下返回数据,调用成功。
好了,大功告成了,其实基于Feign实现服务间调用还是件很容易的事的,希望各位同学可以自己手动实践,来完成服务间的调用。