title: SpringCloud学习笔记五:Sentinel
date: 2020-04-30 16:17:03
tags:
- SpringCloud
- Zuul
categories: SpringCloud
toc_number: true
Zuul
路由
Zuul是Spring Cloud全家桶中的微服务API网关。
所有从设备或网站来的请求都会经过Zuul到达后端的Netflix应用程序。作为一个边界性质的应用程序,Zuul提供了动态路由、监控、弹性负载和安全功能。
Zuul底层利用各种filter实现如下功能:
- 认证和安全 识别每个需要认证的资源,拒绝不符合要求的请求。
- 性能监测 在服务边界追踪并统计数据,提供精确的生产视图。
- 动态路由 根据需要将请求动态路由到后端集群。
- 压力测试 逐渐增加对集群的流量以了解其性能。
- 负载卸载 预先为每种类型的请求分配容量,当请求超过容量时自动丢弃。
- 静态资源处理 直接在边界返回某些响应。
下面简单介绍一下使用方式
zuul项目是独立项目。
添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
添加配置文件
zuul:
routes:
producer: # 路由ID,可自定义
path: /producer-server/** # 使用时URL中携带的路径
url: http://127.0.0.1:8000 # 映射的真实地址
面向服务映射:
- 开启zuul项目的eureka服务发现功能
- 配置文件中的url修改:
zuul:
routes:
producer: # 路由ID,可自定义
path: /producer-server/** # 使用时URL中携带的路径
# url: http://127.0.0.1:8000 # 映射的真实地址
serviceId: micro-producer # 映射的真实服务ID
配置简化
如果,被映射的服务名称与路由ID一致,可简写为:
zuul:
routes:
micro-producer: /producer-server/** # 服务名称:访问路径
zuul存在默认访问方式,即直接访问以服务名称为URL的地址也是可以的。
添加注解
在启动类中添加@EnableZuulProxy
注解。
过滤器
添加依赖
省略
实现ZuulFilter抽象方法
自定义过滤器:
/**
* 自定义过滤器
*/
@Component
public class ZuulFilterImpl extends ZuulFilter {
/**
* @return 当前过滤器类型
*/
@Override
public String filterType() {
return "pre";
}
/**
* 返回值越小,代码越先执行
*
* @return 过滤器执行顺序
*/
@Override
public int filterOrder() {
return 1;
}
/**
* @return 是否开启当前过滤器
*/
@Override
public boolean shouldFilter() {
return true;
}
/**
* 过滤器执行内容
*
* @return
* @throws ZuulException 异常
*/
@Override
public Object run() throws ZuulException {
// 执行zuul过滤器
return null;
}
}
过滤器类型:
- pre:转发之前执行
- routing:路由请求时执行
- post:执行服务获取返回值之前执行
- error:出现异常时执行