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项目是独立项目。

添加依赖

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
  4. </dependency>

添加配置文件

  1. zuul:
  2. routes:
  3. producer: # 路由ID,可自定义
  4. path: /producer-server/** # 使用时URL中携带的路径
  5. url: http://127.0.0.1:8000 # 映射的真实地址

面向服务映射:

  1. 开启zuul项目的eureka服务发现功能
  2. 配置文件中的url修改:
    1. zuul:
    2. routes:
    3. producer: # 路由ID,可自定义
    4. path: /producer-server/** # 使用时URL中携带的路径
    5. # url: http://127.0.0.1:8000 # 映射的真实地址
    6. serviceId: micro-producer # 映射的真实服务ID

配置简化

如果,被映射的服务名称与路由ID一致,可简写为:

  1. zuul:
  2. routes:
  3. micro-producer: /producer-server/** # 服务名称:访问路径

zuul存在默认访问方式,即直接访问以服务名称为URL的地址也是可以的。

添加注解

在启动类中添加@EnableZuulProxy注解。

过滤器

添加依赖

省略

实现ZuulFilter抽象方法

自定义过滤器:

  1. /**
  2. * 自定义过滤器
  3. */
  4. @Component
  5. public class ZuulFilterImpl extends ZuulFilter {
  6. /**
  7. * @return 当前过滤器类型
  8. */
  9. @Override
  10. public String filterType() {
  11. return "pre";
  12. }
  13. /**
  14. * 返回值越小,代码越先执行
  15. *
  16. * @return 过滤器执行顺序
  17. */
  18. @Override
  19. public int filterOrder() {
  20. return 1;
  21. }
  22. /**
  23. * @return 是否开启当前过滤器
  24. */
  25. @Override
  26. public boolean shouldFilter() {
  27. return true;
  28. }
  29. /**
  30. * 过滤器执行内容
  31. *
  32. * @return
  33. * @throws ZuulException 异常
  34. */
  35. @Override
  36. public Object run() throws ZuulException {
  37. // 执行zuul过滤器
  38. return null;
  39. }
  40. }

过滤器类型:

  • pre:转发之前执行
  • routing:路由请求时执行
  • post:执行服务获取返回值之前执行
  • error:出现异常时执行