路由网关--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);

@Override
public String filterType(){
return Pre_TYPE;
} @Override
public int filterOrder(){
return 0;
} @Override
public 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 最终将请求分发到具体的服务上。

路由网关--spring cloud zuul的更多相关文章

  1. SpringCloud(5)路由网关Spring Cloud Zuul

    一个简单的微服务系统如下图: 1.为什么需要Zuul Zuul很容易实现 负载均衡.智能路由 和 熔断器,可以做身份认证和权限认证,可以实现监控,在高流量状态下,对服务进行降级. 2.路由网关 继续前 ...

  2. spring boot 2.0.3+spring cloud (Finchley)5、路由网关Spring Cloud Zuul

    Zuul作为微服务系统的网关组件,用于构建边界服务,致力于动态路由.过滤.监控.弹性伸缩和安全. 为什么需要Zuul Zuul.Ribbon以及Eureka结合可以实现智能路由和负载均衡的功能:网关将 ...

  3. Spring Cloud 微服务二:API网关spring cloud zuul

    前言:本章将继续上一章Spring Cloud微服务,本章主要内容是API 网关,相关代码将延续上一章,如需了解请参考:Spring Cloud 微服务一:Consul注册中心 Spring clou ...

  4. 服务网关Spring Cloud Zuul

    Spring Cloud Zuul 开发环境 idea 2019.1.2 jdk1.8.0_201 Spring Boot 2.1.9.RELEASE Spring Cloud Greenwich S ...

  5. Spring Cloud Zuul 网关使用与 OAuth2.0 认证授权服务

    API 网关的出现的原因是微服务架构的出现,不同的微服务一般会有不同的服务地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题: 客户端会 ...

  6. Spring Cloud 微服务三: API网关Spring cloud gateway

    前言:前面介绍了一款API网关组件zuul,不过发现spring cloud自己开发了一个新网关gateway,貌似要取代zuul,spring官网上也已经没有zuul的组件了(虽然在仓库中可以更新到 ...

  7. spring cloud: zuul: 微网关-简单使用与路由配置

    spring cloud: zuul: 微网关-简单使用与路由配置 首先引入依赖 <dependency> <groupId>org.springframework.cloud ...

  8. Spring Cloud Zuul API服务网关之请求路由

    目录 一.Zuul 介绍 二.构建Spring Cloud Zuul网关 构建网关 请求路由 请求过滤 三.路由详解 一.Zuul 介绍 ​ 通过前几篇文章的介绍,我们了解了Spring Cloud ...

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

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

随机推荐

  1. idea spring boot搭建笔记

    如何建立spring boot项目 首先建一个empty Probject,Modules导入新创建的Project new modules选择Spring lnitializr ->next( ...

  2. Jenkins配置定时构建项目

    general: 源码管理: 构建触发器: 构建后操作:

  3. linux修改Jvm内存限制

    一.直接通过java 命令去执行class文件的时候,也可以设置JVM参数,eg : java -Xms512m -Xmx1024m HelloWorld在cmd中设置,也必须是执行java命令时 堆 ...

  4. JavaSE---多线程---线程的控制

    1.Java提供了一些工具方法,可以便捷控制线程的执行: 1.1 join Thread提供了让一个线程等待另一个线程执行完成的方法:join: 当某个程序的执行流中调用其他线程的join方法,该线程 ...

  5. css强制换行和超出部分隐藏实现

    一.强制换行 1 word-break: break-all; 只对英文起作用,以字母作为换行依据. 2 word-wrap: break-word; 只对英文起作用,以单词作为换行依据. 3 whi ...

  6. Java中的小知识。

    package jicheng; public class Animal { //定义一个成员变量name. private String name; public String getName() ...

  7. electron-vue中点击按钮,实现打开程序目录里面的某个文件

    设计到的知识点: explorer.exe /select 打开文件夹并把焦点放到指定文件 nodejs中的process模块--child_process.exec 我这里是根据需求,点击按钮后打开 ...

  8. PHP浮点计算结果返回异常问题

    php中如果直接小数点进行计算的话.比如16.8*3var_dump是50.4.但是return就变成了50.400000000000006.至于是什么原因本人尚不得而知.解决方法是用把计算放入下面的 ...

  9. 团队冲刺DAY7

    团队冲刺DAY7 今天是2019.6.2,交项目的最后一天. 今天的任务是将之前写好的服务器和加解密算法以及图形界面有机结合在一起. 早上8:00,坐在电脑前,一脸懵,因为图形界面不是很懂,所以不知道 ...

  10. SQL Server中char、varchar、text和nchar、nvarchar、ntext的区别 (转)

    转:http://blog.csdn.net/jackychu/article/details/4183118 http://www.cnblogs.com/jhxk/articles/1633578 ...