Spring Cloud Feign
一、FeignClient简介
1.JAVA常见接口调用方式
- Apache:Http Client
- Netty:HTTP Client
- JDK:URL Connection
- Spring:RestTemplate
2.Feign简介
在Spring Cloud开发微服务应用时中,
各个微服务提供者都是以 HTTP接口的形式对外提供服务,
因此服务消费者要通过HTTP Client的方式访问服务。
Feign是一种声明式、模板化的HTTP客户端。
Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息。
而Feign则会完全代理HTTP请求,我们只需要像调用方法一样调用它就可以完成服务请求及相关处理。
开发者完全感知不到这是远程方法,
更感知不到这是个HTTP请求。
SpringCloud对Feign进行了封装,
使其支持SpringMVC标准注解和HttpMessageConverters。
3.Feign特性
- 可插拔的注解支持,包括Feign注解和JAX-RS注解
- 支持可插拔的HTTP编码器和解码器
- 支持Hystrix和它的Fallback
- 支持Ribbon的负载均衡
- 支持HTTP请求和响应的压缩
二、FeignClient工作原理
- 1.首先通过@EnableFeignCleints注解开启FeignCleint
- 2.根据Feign的规则实现接口,并加@FeignCleint注解
- 3.程序启动后,会进行包扫描,扫描所有的@ FeignCleint的注解的类,并将这些信息注入到ioc容器中
- 4.当接口的方法被调用,通过jdk的代理,来生成具体的RequesTemplate
- 5.RequesTemplate在生成Request
- 6.Request交给Client去处理,其中Client可以是HttpUrlConnection、HttpClient也可以是Okhttp
- 7.最后Client被封装到LoadBalanceClient类,这个类结合类Ribbon做到了负载均衡
三、FeignClient的使用
1.Eureka-Server注册中心
1)application.yml配置
server:
port: 1111
spring:
application:
name:eureka-server
eureka:
instance:
hostname: localhost
client:
#不注册自己
register-with-eureka: false
#不获取eureka服务器注册信息
fetch-registry: false
server-url:
defaultZone: http://${
eureka.instance.hostname}:${
server.port}/eureka/
2)Application配置
@EnableEurekaServer
@SpringBootApplication
public class