概述
是什么
- Github
- Feign是一个声明式WebService客户端,使用Feign能够让编写Web Service变得简单
- 其使用方法是定义一个服务接口然后在上面添加注解,Feign也支持可插拔式的编码器和解码器。Spring Cloud对Feign进行了封装使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Rureka和Ribbon组合使用支持负载均衡
- 只需要创建一个接口,然后添加一个注解
能干啥
- Feign旨在使编写Java Http客户端更加容易
- 前面在使用Ribbon+RestTemplate时,利用RestTemplate对Http请求封装,形成了模板化的调用方法。
- 实际开发中对服务依赖的调用可能不止一处,往往一个接口会被多初调用,所以通常都会针对每个微服务自行封装一些客户端来包装这些依赖服务的调用。所以Feign在此基础上做了进一步的封装,由他来帮助我们定义和实现依赖服务接口的定义。在Feign的实现下,我们只需要创建一个接口并使用注解的方式来配置它(以前时Dao接口上面标注Mapper注解,现在是一个微服务接口上边标注一个Feign注解即可),即可完成服务提供方的接口绑定,简化了使用Spring cloud Ribbon时,自动封装服务调用客户端的开发量。
Feign集成了Ribbon
- 利用Ribbon维护了Payment的服务列表信息,并且通过轮询实现了客户端的负载均衡。而与Ribbon不同的是,通过Feign只需要定义服务绑定接口且以声明式的方法,优雅简单的实现服务调用。
Feign和openFeign
OpenFeign使用
新建cloud-consumer-feign-order80
写pom
<dependencies>
<!--openfeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--eureka client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.hsw.cloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
写yml
server:
port: 80
eureka:
client:
register-with-eureka: false
fetch-registry: true
service-url:
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
主启动
编写业务类
- 业务逻辑接口+@FeignClient配置调用provider服务
- 新建PaymentFeignService接口并新增注解@FeignClient
总结
OpenFeign超时控制
- 先停掉8002
- 服务提供方8001故意写暂停程序
- 服务消费方80添加超时方法PaymentFeignService
-
服务消费方80添加超时方法OrderFeignController
-
测试
默认Feign客户端只等待1s,但是服务端处理需要超过1s,导致Feign直接返回报错,为了避免这种情况需要设置Feign的超时时间,在yml中开启
由于Feign的底层也是使用Ribbon做负载均衡所以yml的配置如下
OpenFeign日志打印功能
- 对Feign的调用情况进行监控和输出
- 日志级别如下
- 配置bean
- 日志输出
小结
服务注册中心
- Eureka
- Zookeeper
- Consul
- Nacos
服务调用
- Ribbon
- LoadBalancer
- Feign
- OpenFeign
服务降级
- Hystrix
- resilience4j
- sentinel