个人学习SpringCloud系列 Feign篇
Github Link: https://github.com/panjianlong13/SpringBoot-SpringCloud/tree/master/spring-cloud-feign
Feign介绍
Feign是一种声明式、模板化的HTTP客户端,可以帮助我们更快捷、优雅地调用HTTP API。Feign的功能类似dubbo暴露服务,但是与dubbo稍有不同的是Feign是HTTP REST接口的形式暴露的
Spring Cloud Feign是基于Netflix feign实现,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供这两者的强大功能外,还提供了一种声明式的Web服务客户端定义的方式。Spring Cloud对Netflix Feign进行了增强和包装,使Feign支持了Spring MVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便,能够在类接口上添加注释,成为一个REST API 客户端。
Spring Cloud Feign帮助我们定义和实现依赖服务接口的定义。在Spring Cloud feign的实现下,只需要创建一个接口并用注解方式配置它,即可完成服务提供方的接口绑定,具有可插拔的注解特性,简化了在使用Spring Cloud Ribbon时自行封装服务调用客户端的开发量。Spring Cloud Feign具备可插拔的注解支持,支持Feign注解、JAX-RS注解和Spring MVC的注解。
总结如下:
1.可插拔的注解支持,包括Feign
注解和JAX-RS
注解
2.支持可插拔的HTTP
编码器和解码器
3.支持Hystrix
和它的Fallback
支持Ribbon
的负载均衡
4.支持HTTP
请求和响应的压缩Feign
是一个声明式的Web Service
客户端,它的目的就是让Web Service
调用更加简单
5.Feign
还提供了HTTP
请求的模板,通过编写简单的接口和注解,就可以定义好HTTP
请求的参数、格式、地址等信息
Feign和Ribbon的区别
Ribbon
是一个基于 HTTP 和 TCP 客户端的负载均衡器
它可以在客户端配置 ribbonServerList(服务端列表),然后轮询请求以实现均衡负载。
Feign
Spring Cloud Netflix 的微服务都是以 HTTP 接口的形式暴露的,所以可以用 Apache 的 HttpClient 或 Spring 的 RestTemplate 去调用,而 Feign 是一个使用起来更加方便的 HTTP 客戶端,使用起来就像是调用自身工程的方法,而感觉不到是调用远程方法。
Feign封装了Ribbon spring-cloud-starter-feign 里面已经包含了 spring-cloud-starter-ribbon
Feign实战
启动Eureka和上篇中的三个Provider,此处不详细展开
新建SpringBoot项目
pom.xml中添加依赖
application.property
开启Feign
在工程的启动类中,通过@EnableFeignClients
注解开启Feign的功能:
定义接口
通过@FeignClient("服务名")
,来指定调用哪个服务。在代码中调用'eureka-provider'服务的'/'接口,服务提供者有Provider-1,Provider-2和Provider-3
消费控制器
通过RestController调用Provider的home方法
启动Feign-Consumer
测试Feign-Consumer
在命令窗口curl http://localhost:8080/hello
,发现Feign已经实现负载均衡