背景先看 feign 的单独文章 Feign 声明式客户端接口
spring cloud 中好多工具是 一起使用的,feign 整合了 ribbon和hystrix 并提供了声明式消费者客户端,我们把这些工具整合一起使用
ribbon —— 负载均衡,重试hystrix —— 断路器 (降级 ,熔断)用 feign 代替 hystrix+ribbon
feign + ribbon 负载均衡和重试1 - 负载均衡
无需额外配置,feign已经启用了 ribbon 负载均衡和重试 机制,可以通过配置对参数进行调用

ConnectTimeout=1000 ReadTimeout=1000 MaxAutoRetries=0 MaxAutoRetriesNextServer=1

2 - 配置 ribbon 超时和重试

ribbon —— 全局配置

item-service —— 对特定服务实例的配置

spring:
  application:
    name: feign
    
server:
  port: 3001
  
eureka:
  client:
    service-url:
      defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka
      
ribbon:
  ConnectTimeout: 1000
  ReadTimeout: 1000
  
item-service:
  ribbon:
    MaxAutoRetries: 1
    MaxAutoRetriesNextServer: 2
    ConnectTimeout: 1000
    ReadTimeout: 500

启动服务,访问测试

http://localhost:3001/item-service/35

提示 :

重载 一般不怎么使用,看项目的需求,如果需要才用

负载均衡默认都是有的,看情况,如果项目需要才用上



feign + hystrix 降级

1 - feign 启用 hystrix

feign 默认没有启用 hystrix,添加配置,启用 hystrix

1.1 - application.yml 添加配置

feign:
  hystrix:
    enabled: true

1.2 启用 hystrix 后,访问服务

http://localhost:3001/item-service/35

默认1秒会快速失败,没有降级方法时,会显示白板页

spring feign 重试次数配置_微服务



2 - feign 实现 hystrix 降级

远程接口中指定降级类

目标:远程调用失败, 会执行降级类中的代码

spring feign 重试次数配置_spring cloud_02

2 - 1 远程接口 (接口)

ItemClient
@FeignClient(name="item-service",fallback = ItemClientFB.class)
public interface ItemClient {
...
...
OrderClient
...
@FeignClient(name="order-service",fallback = OrderClientFB.class)
public interface OrderClient{
...
UserClient
...
@FeignClient(name="user-service",fallback = UserClientFB.class)
public interface UserClient{
...

spring feign 重试次数配置_spring cloud_03

2 - 2 降级类

降级类需要实现远程接口

spring feign 重试次数配置_微服务_04

ItemClientFB
@Component
public class ItemClientFB implements ItemClient{
    @Override
    public JsonResult<List<Item>> getItems(String orderId) {
        return JsonResult.err().msg("调用商品失败");
    }

    @Override
    public JsonResult<?> decreaseNumber(List<Item> items) {
        return JsonResult.err().msg("调用商品失败");
    }
}
OrderClientFB
@Component
public class OrderClientFB implements OrderClient{
    @Override
    public JsonResult<Order> getOrder(String orderId) {
        return JsonResult.err().msg("调用订单失败");
    }

    @Override
    public JsonResult<?> saveOrder() {
        return JsonResult.err().msg("调用订单失败");
    }
}
UserClientFB
@Component
public class UserClientFB implements UserClient{
    @Override
    public JsonResult<User> getUser(Integer userId) {
        return JsonResult.err().msg("调用用户失败");
    }

    @Override
    public JsonResult<?> addScore(Integer userId, Integer score) {
        return JsonResult.err().msg("调用用户失败");
    }
}

spring feign 重试次数配置_微服务架构_05



2 - 3 启动服务,访问测试

http://localhost:3001/item-service/35

spring feign 重试次数配置_微服务架构_06

调用失败后 跳转到降级对象 (降级成功)



feign + hystrix 监控

spring feign 重试次数配置_spring cloud_07

1 - pom.xml 添加 hystrix 起步依赖

feign 没有包含完整的 hystrix 依赖

1 - 1 xml 依赖

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

1 - 2 可视化依赖

spring feign 重试次数配置_微服务架构_08


主程序添加 @EnableCircuitBreaker

@EnableCircuitBreaker
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class Sp09FeignApplication {
    public static void main(String[] args) {
        SpringApplication.run(Sp09FeignApplication.class, args);
    }

}

spring feign 重试次数配置_spring_09


2 - 配置 actuator,暴露 hystrix.stream 监控端点

查看pom.xml, 确认已经添加了 actuator依赖

2 - 1 actuator 依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2 - 2 application.yml 暴露 hystrix.stream 端点

management:
  endpoints:
    web:
      exposure:
        include: hystrix.stream

spring feign 重试次数配置_微服务_10


3 - 启动服务,查看监控端点

http://localhost:3001/actuator

spring feign 重试次数配置_spring feign 重试次数配置_11


4 - hystrix dashboard (监控仪表)

如果没有 hystrix dashboard仪表 或者没学过 那么请进 hystrix dashboard 断路器仪表盘

启动 hystrix dashboard 服务,填入 feign 监控路径,开启监控

访问仪表服务器 : http://localhost:4001/hystrix
填入 feign 监控路径 :http://localhost:3001/actuator/hystrix.stream

spring feign 重试次数配置_微服务_12

访问微服务,以产生监控数据

spring feign 重试次数配置_spring cloud_13

访问业务服务器 : http://localhost:3001/item-service/35

spring feign 重试次数配置_微服务架构_14

spring feign 重试次数配置_spring cloud_15