路由网关--spring boot Zuul

1.为什么需要Zuul?

  1. Zuul Ribbon 以及 Eureka 相结合,可以实现智能路由和负载均衡的功能, Zuul 能够将请求流量按某种策略分发到集群状态的多个服务实例。
  2. 网关将所有服务的 API 接口统 聚合,并统 对外暴露。外界系统调用 PI 接口时,都是由网关对外暴露的 PI 接口,外界系统不需要知道微服务系统中各服务相互调用的复杂性。微服务系统 保护了其内部微服务单元的 API 接口 防止其被外界直接调用,导致服务的敏感信息对外暴露。
  3. 网关服务可以做用户身份认证和权限认证,防止非法请求操作 PI 接口,对服务器起到保护作用。
  4. 网关可以实现监控功能,实时日志输出,对请求进行记录。
  5. 网关可以用来实现流量监控 在高流量的情况下,对服务进行降级。
  6. API 接口从内部服务分离出来 方便做测试。

Zuul工作原理

Zuul 是通过 Servlet 来实现的, Zuul 通过自定义的 Zuu!Servlet (类似于 Spring MVC DispatcServlet 〕来对请求进行控制。 Zuul 的核心 系列过滤器,可以在 Http 请求的发起和响应返回期间执行 系列的过滤器。

  1. PRE 过滤器:它是在请求路由到具体的服务之前执行的,这种类型的过滤器可 以做安全验证,例如身份验证、 参数验证等。
  2. ROUTING 过滤器 它用于将请求路由到具体的微服务 。在默认情况下,它使用Http Client 进行网络请求。
  3. POST 过滤器:它是在请求己被路由到微服务后执行的 般情况下,用作收集统计信息、指标,以及将响 传输到客户端。
  4. ERROR 过滤器:它是在其他过滤器发生错误时执行的
    Zuul 采取了动态读取、编译和运行这些过滤器 过滤器 间不能直接 信,而是通RequestContext 对象来共享数据 每个请求都会创建 RequestContext 对象 Zuul 过滤
    具有 以下关键特性。
    Type (类型) Zuul 过滤器的类型,这个类型决定了过滤器在请求的哪个阶段起作用,例如 Pre Post 阶段等。
    Execution Order (执行顺序) :规定了过滤器的执行顺序, Order 的值越小,越先执行
    Criteria (标准) Filter 行所需的条
    Action (行动〉 如果符合执行条件,则执行 ction (即逻辑代码)。

Zuul生命周期

当一个客户端 Request 请求进入 Zuul 服务时,网关先进入“pre filter 进行一 系列的验证、操作或者判断 然后交给“routing filter ”进行路由转发,转发到具体的服务实例进行逻辑处理、返回数据。当具体的服务处理完后,最后由“post filter ”进行处理, 该类型的处
理器处理完之后,将 Response 信息返回给客户端。

Demo

项目名称:eureka-zuul-client
再启动类EurekaZuulClientApplication加上EnableEurekaClient注解,开启EurekaClient功能,加上@EnableZuulProxy注解,开启Zuul注解
@EnableZuulProxy
@EnableEurekaClient
@SpringBootApplication
public class EurekaZuulClientApplication{
public static void main(String[] args){
SpringApplication.run(EurekaZuulClientApplication.class,args);
}
}

application.yml配置
enruka:
client:
serviceUrl:
defaultZone:http://localhost:8761/eureka/
server:
port:5000
spring:
application:
name:service-zuul
zuul:
routes:
hiapa:
path:/hiapi/
serviceId:eureka-client
ribbonapi:
path:/ribbonapi/

serviceId:eureka-ribbon-client
feignapi:
......
zuul.prefix:XXXX版本号 //给api配置版本号
在Zuul上实现,熔断器

Zuul实现熔断功能需要实现 ZuulFallbackProvider 接口。实现该接口有两个方法,getRoute()方法,用于指定熔断功能应用于哪些路由的服务 个方法 fallbackResponseO为进入熔断功能时执行的逻辑

zuul中使用过滤器

@Component

public class MyFilter extends ZuulFilter
{
private static Logger log=LoggerFactory.getLogger(MyFilter.class);

@Overridepublic String filterType(){return Pre_TYPE;
}@Overridepublic int filterOrder(){return 0;
}@Overridepublic boolean shouldFilter(){return true;
}public Object run(){RequestContext ctx=RequestContext.getCurrentContext();HttpServletRequest request=ctx.getRequest("");Object accessToken=request.getParameter("token");if(accessToken==null){log.warn("token is empty");ctx.setSendZuulResponse(false);ctx.setResponseStatusCode(401);try{ctx.getResponse().write("token is empty");}catch(Exception e){return null;}}log.info("ok");return null;
}

}

Zuul的常见使用方式

Zuul是采用类似于Spring mvc的DispatchServlet来实现的,采用的是异步阻塞模型,性能比ngnix差,由于Zuul和其他Netflix组件可以相互配合,无缝集成,Zuul很容易就能实现负载均衡,智能路由,熔断器。由于 川的横向扩展能力非常好,所以当负载过高时,可以通过添加实例来解决性
能瓶颈。

一种常见的使用方式是对不同的渠道使用不同的 Zuul 来进行路由,例如移动端共用Zuul 关实例 Web 端用另 Zuul 网关实例,其他的客户端用另外 Zuul 实例进行路由另外已种常见的集群是通过 Ngnix Zuul 相互结合来做负载均衡。暴露在最外面的是Ngnix 从双热备进行 Keepalive, Ngnix 经过某种路由策略,将请求路由转发到 Zuul 集群上,Zuul 最终将请求分发到具体的服务上。

转载于:https://www.cnblogs.com/dibinbin/p/9267519.html

路由网关--spring cloud zuul相关推荐

  1. 《深入理解 Spring Cloud 与微服务构建》第十章 路由网关 Spring Cloud Zuul

    <深入理解 Spring Cloud 与微服务构建>第十章 路由网关 Spring Cloud Zuul 文章目录 <深入理解 Spring Cloud 与微服务构建>第十章 ...

  2. 14 基于网关Spring Cloud Zuul的接口限流实现方案

    在Spring Cloud Zuul网关中,限流业务是放在前置过滤器实现的,也就是在请求被Zuul转发给微服务之前进行限流.另外,当前置过滤器中同时存在限流.鉴权.身份认证等业务时,应该将限流业务放在 ...

  3. API网关—Spring Cloud Zuul

    原文作者:思想者 原文地址:一起学习使用Spring Cloud Netflix之Zuul 前言 Zuul在Spring Cloud 体系中扮演着统一网关的角色,负责与外部交互.用户可以通过不同的UR ...

  4. SpringCloud-07-新一代路由网关Spring Cloud Gateway

    服务网关Gateway 1. 概述简介 1. SpringCloud Gateway是什么? 服务网关还可以用Zuul网关,但是Zuul网关由于一些维护问题,所以这里我们学习Gateway网关,Spr ...

  5. 网关 Spring Cloud Zuul 自定义过滤器认证转换 Token

    整理思路 由网关Zuul进行Token颁布 由网关Zuul进行登录认证拦截 拦截的配置等可以用Mysql存储配置或者配置文件,只配置默认放开的路径即可 拦截后把在zuul中的token,换成跟后台用户 ...

  6. API 网关服务:Spring Cloud Zuul(二):路由详解、Cookie 与头信息

    实践出于<Spring Cloud 微服务实战> - 瞿永超 著 路由详解 传统路由配置   传统路由配置就是在不依赖于服务发现机制的情况下,通过在配置文件中具体指定每个路由表达式与服务实 ...

  7. Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式

    时间过的很快,写springcloud(十):服务网关zuul初级篇还在半年前,现在已经是2018年了,我们继续探讨Zuul更高级的使用方式. 上篇文章主要介绍了Zuul网关使用模式,以及自动转发机制 ...

  8. Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式。

    时间过的很快,写springcloud(十):服务网关zuul初级篇还在半年前,现在已经是2018年了,我们继续探讨Zuul更高级的使用方式. 上篇文章主要介绍了Zuul网关使用模式,以及自动转发机制 ...

  9. 使用Nacos实现Spring Cloud Zuul的动态路由

    一.前言 Nacos是阿里巴巴开源的致力于服务发现与管理.动态配置管理,以及动态DNS服务的中间件,目前已发布至0.5.0版本,除了与Spring Cloud更加紧密结合以外,还丧心病狂地支持JDK1 ...

最新文章

  1. 是否可能有一台算力无穷大的计算机?
  2. 计数在html怎么添加,在Go中显示html模板的计数
  3. 浅析php反序列化字符串逃逸
  4. 九度OJ 1051:数字阶梯求和
  5. JavaScript编程语言 基础 (1)
  6. ios php rsa,RSA 加密 iOS
  7. encode_chunked=req.has_header(‘Transfer-encoding‘))问题解决方法
  8. linux window nginx性能,KVM虚拟机 Nginx性能测试
  9. linux高级知识,LAMP架构(一),MYSQL安装
  10. 理解EMM:是更好地管理移动性的关键所在
  11. FFmpeg —— MP4文件提取h264文件
  12. html一键生成海报,微海报在线制作一键生成方法
  13. filco的pin码_Filco圣手二代双模蓝牙机械键盘连接方法
  14. maven 解决Cannot access alimaven以及Process terminated
  15. 台式计算机的电流是多少安,电脑usb支持瞬间电流是多大?
  16. 类拼多多砍价业务总结
  17. dubbo之使用nacos作为注册中心
  18. 单枪匹马的背锅侠,终于不再是一个人的军团了
  19. 梯形求积公式 和 复合梯形求积公式 Matlab 实现
  20. “SNR”、“Eb/N0”与“Es/N0”辨析

热门文章

  1. Google设想将《黑镜》情节变为现实,但要你的隐私作交换
  2. Spring官宣新家族成员:Spring Authorization Server!
  3. 关于UUID的二三事
  4. 请给SpringBoot多一些内存
  5. 用了 Lambda 之后,发现可以忘记设计模式了
  6. 面试环节:在浏览器输入 URL 回车之后发生了什么?(超详细版)
  7. Datawhale自组织学习报告!
  8. 【图解】算法原理!通俗理解机器学习算法
  9. Transformer大升级!谷歌、OpenAI联合推出分层模型,刷榜ImageNet32刷新SOTA
  10. 2021 年 7 月编程语言排行榜