springcloud之Ribbon,Feign,Hystrix,Gateway介绍
Posted 一只猪的思考
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springcloud之Ribbon,Feign,Hystrix,Gateway介绍相关的知识,希望对你有一定的参考价值。
一、Ribbon
1.Ribbon概述
- Ribbon是 Netflix 提供的一个基于HTTP和TCP的客户端负载均衡工具。
- Ribbon主要有两个功能:
- 简化远程调用
- 负载均衡
- 服务端负载均衡
-
- 负载均衡算法在服务端
-
- 由负载均衡器维护服务地址列表
- 客户端负载均衡
-
- 负载均衡算法在客户端
-
- 客户端维护服务地址列表
2.Ribbon远程调用
Ribbon 可以与 简化 RestTemplate 的远程调用
3. Ribbon 负载均衡
Ribbon 负责均衡策略:
- 随机 :RandomRule
- 轮询 :RoundRobinRule
- 最小并发:BestAvailableRule
- 过滤:AvailabilityFilteringRule
- 响应时间:WeightedResponseTimeRule
- 轮询重试:RetryRule
- 性能可用性:ZoneAvoidanceRule
同时定义rule方法
设置负载均衡策略- 编码
- 配置
- user-service: # 生产者服务名称 ribbon:
- NFloadBalancerRuleClassName: XxxRule # 负载均衡策略类
二、 Feign 声明式服务调用
1.feign概述
- Feign 是一个声明式的
REST
客户端,它用了基于接口
的注解方式
,很方便实现客户端配置。- Feign 最初由 Netflix 公司提供,但不支持SpringMVC注解,后由 SpringCloud 对其封装,支持了
SpringMVC
注解,让使用者更易于接受
2.feign快速入门
- 在消费端引入 open-feign 依赖
<!--feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 编写Feign调用接口
- 在启动类 添加 @EnableFeignClients 注解,开启Feign功能
- 测试调用
3.feign其他功能
- Feign 其他功能 – 超时设置
- Feign 底层依赖于 Ribbon 实现负载均衡和远程调用。
- Ribbon默认1秒超时。
- 超时配置:
- Feign 其他功能 – 日志记录
三、 Hystrix 熔断器
1.Hystrix概述
- Hystix 是 Netflix 开源的一个延迟和容错库,用于隔离访问远程服务、第三方库,防止出现级联失败(雪崩)。
- 雪崩:一个服务失败,导致整条链路的服务都失败的情形。
- Hystix 主要功能
- 隔离
-
- 线程池隔离
-
- 信号量隔离
- 降级
- 熔断
- 限流
2.Hystrix降级
- Hystix 降级:当服务发生异常或调用超时,返回默认数据
Hystrix 降级 – 服务提供方
- 在服务提供方,引入 hystrix 依赖
<!-- hystrix -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
-
定义降级方法
-
使用 @HystrixCommand 注解配置降级方法
-
在启动类上开启Hystrix功能:@EnableCircuitBreaker
Hystrix 降级 – 服务消费方
5. feign 组件已经集成了 hystrix 组件。
6. 定义feign 调用接口实现类,复写方法,即 降级方法
-
在 @FeignClient 注解中使用 fallback 属性设置降级处理类。
-
配置开启 feign.hystrix.enabled = true
3.Hystrix熔断
Hystrix 熔断机制,用于监控微服务调用情况,当失败的情况达到预定的阈值(5秒失败20次),会打开断路器,拒绝所有请求,直到服务恢复正常为止。
4.Hystrix熔断监控
Hystrix-dashboard
yml配置
开启dashboard
turbine
详细配置看这篇博客
Turbine聚合监控
四、Gateway 网关
1.网关概述
- 网关旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。
- 在微服务架构中,不同的微服务可以有不同的网络地址,各个微服务之间通过互相调用完成用户请求,客户端可能通过调用N个微服务的接口完成一个用户请求。
-
- 存在的问题:
-
-
- 客户端多次请求不同的微服务,增加客户端的复杂性
-
-
-
- 认证复杂,每个服务都要进行认证
-
-
-
- http请求不同服务次数增加,性能不高
-
- 网关就是系统的入口,封装了应用程序的内部结构,为客户端提
供统一服务,一些与业务本身功能无关的公共逻辑可以在这里实现,
诸如认证、鉴权、监控、缓存、负载均衡、流量管控、路由转发等 - 在目前的网关解决方案里,有nginx+ Lua、Netflix Zuul 、Spring Cloud Gateway等等
2.Gateway 网关快速入门
- 搭建网关模块
application.yml配置:
server:
port: 80
spring:
application:
name: api-gateway-server
cloud:
# 网关配置
gateway:
# 路由配置:转发规则
routes: #集合。
# id: 唯一标识。默认是一个UUID
# uri: 转发路径
# predicates: 条件,用于请求网关路径的匹配规则
# filters:配置局部过滤器的
- id: gateway-provider
# 静态路由
# uri: http://localhost:8001/
# 动态路由
uri: lb://GATEWAY-PROVIDER
predicates:
- Path=/goods/**
filters:
- AddRequestParameter=username,zhangsan
- id: gateway-consumer
# uri: http://localhost:9000
uri: lb://GATEWAY-CONSUMER
predicates:
- Path=/order/**
# 微服务名称配置
discovery:
locator:
enabled: true # 设置为true 请求路径前可以添加微服务名称
lower-case-service-id: true # 允许为小写
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
- 引入依赖:starter-gateway
<dependencies>
<!--引入gateway 网关-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- eureka-client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
-
编写启动类
-
编写配置文件
-
启动测试
3.Gateway 过滤器
Gateway 过滤器 – 局部过滤器
Gateway 过滤器 – 全局过滤器
gateway详细配置
Spring Cloud Gateway 内置的过滤器工厂
以上是关于springcloud之Ribbon,Feign,Hystrix,Gateway介绍的主要内容,如果未能解决你的问题,请参考以下文章