其他分享
首页 > 其他分享> > 《feign (ribbon + hystrix + hystrix监控) 工具整合》

《feign (ribbon + hystrix + hystrix监控) 工具整合》

作者:互联网

背景

先看 feign 的单独文章 Feign 声明式客户端接口

spring cloud 中好多工具是 一起使用的,feign 整合了 ribbon和hystrix 并提供了声明式消费者客户端,我们把这些工具整合一起使用

用 feign 代替 hystrix+ribbon


feign + ribbon 负载均衡和重试

1 - 负载均衡

无需额外配置,feign已经启用了 ribbon 负载均衡重试 机制,可以通过配置对参数进行调用

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

2 - 配置 ribbon 超时和重试

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秒会快速失败,没有降级方法时,会显示白板页

在这里插入图片描述



2 - feign 实现 hystrix 降级

远程接口中指定降级类

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

在这里插入图片描述

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{
...

在这里插入图片描述

2 - 2 降级类

降级类需要实现远程接口

在这里插入图片描述

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("调用用户失败");
    }
}

在这里插入图片描述



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

http://localhost:3001/item-service/35
在这里插入图片描述

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



feign + hystrix 监控

在这里插入图片描述

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 可视化依赖

在这里插入图片描述


主程序添加 @EnableCircuitBreaker

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

}

在这里插入图片描述


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

在这里插入图片描述


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

http://localhost:3001/actuator
在这里插入图片描述


4 - hystrix dashboard (监控仪表)

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

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

标签:feign,JsonResult,hystrix,service,public,ribbon
来源: https://blog.csdn.net/weixin_45103228/article/details/114144114