美文网首页
SpringCloud学习(五)之Zuul

SpringCloud学习(五)之Zuul

作者: Gukson666 | 来源:发表于2019-11-30 22:52 被阅读0次

Zuul简介

Spring Cloud Zuul路由是微服务架构的不可或缺的一部分,提供动态路由,监控,弹性,安全等的边缘服务。Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器。

  1. 引入依赖
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
  1. 启动类加上注解@EnableZuulProxy:
@SpringBootApplication
@EnableZuulProxy
@EnableEurekaClient
@EnableDiscoveryClient
public class ServiceZuulApplication {

    public static void main(String[] args) {
        SpringApplication.run( ServiceZuulApplication.class, args );
    }
}

  1. application.yml配置文件
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
server:
  port: 8769
spring:
  application:
    name: service-zuul
zuul:
  routes:
    api-a:
      path: /api-a/**
      serviceId: service-ribbon
    api-b:
      path: /api-b/**
      serviceId: service-feign

首先指定服务注册中心的地址为http://localhost:8761/eureka/,服务的端口为8769,服务名为service-zuul;以/api-a/ 开头的请求都转发给service-ribbon服务;以/api-b/开头的请求都转发给service-feign服务。依次运行这五个工程:

  • 访问http://localhost:8769/api-a/将会调用service-ribbon服务
  • 访问http://localhost:8769/api-b/将会调用service-feign服务
    可见zuul起到了路由的作用。

Zuul的核心

Filter是Zuul的核心,用来实现对外服务的控制。Filter的生命周期有4个,分别是“PRE”、“ROUTING”、“POST”、“ERROR”,整个生命周期可以用下图来表示:



Zuul大部分功能都是通过过滤器来实现的,这些过滤器类型对应于请求的典型生命周期。

  • filterType

    • pre: 这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。
    • routing:这种过滤器将请求路由到微服务。这种过滤器用于构建发送给微服务的请求,并使用Apache HttpClient或Netfilx Ribbon请求微服务。
    • post:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。
    • error:在其他阶段发生错误时执行该过滤器。 除了默认的过滤器类型,Zuul还允许我们创建自定义的过滤器类型。例如,我们可以定制一种STATIC类型的过滤器,直接在Zuul中生成响应,而不将请求转发到后端的微服务。
  • filterOrder:过滤的顺序

  • shouldFilter:这里可以写逻辑判断,是否要过滤,本文true,永远过滤。

  • run:过滤器的具体逻辑。可用很复杂,包括查sql,nosql去判断该请求到底有没有权限访问。

若禁用指定的Filter可以在application.yml中配置需要禁用的filter:

zuul:
    FormBodyWrapperFilter:
        pre:
            disable: true

除了zuul自身定义的Filter外,其实也可以进行自定义Filter,有兴趣的可以自行深入了解。

Zuul高可用

实际在使用Zuul的方式如上图,不同的客户端使用不同的负载将请求分发到后端的Zuul,Zuul在通过Eureka调用后端服务,最后对外输出。因此为了保证Zuul的高可用性,前端可以同时启动多个Zuul实例进行负载,在Zuul的前端使用Nginx等进行负载转发以达到高可用性。

相关文章

  • SpringCloud学习(五)之Zuul

    Zuul简介 Spring Cloud Zuul路由是微服务架构的不可或缺的一部分,提供动态路由,监控,弹性,安全...

  • 20. SpringCloud之Zuul源码解析

    1、前言 Zuul组件的作用和使用方式 :SpringCloud之Zuul分布式服务网关[https://www....

  • SpringCloud之Zuul

    1.为什么需要网关   想象这么一个场景,如果我们有成千上万的微服务,客户端如果一个一个的去连接,显然这么做是不现...

  • springcloud之zuul

    前言   之前的eureka只是注册中心,如果想把端口集体暴露,并且还是经过了一层伪装,遮盖怎么办呢?答案就是,经...

  • SpringCloud 集成网关Zuul

    SpringCloud 集成网关Zuul Zuul简介 1.zuul是Netflix开源的一个APIGateway...

  • SpringCloud(第 018 篇)Zuul 服务 API

    SpringCloud(第 018 篇)Zuul 服务 API 网关微服务之代理与反向代理 一、大致介绍 二、实现...

  • 互联网技术工具概览

    Dubbo/Dubbox SpringCloud/Zuul/Hystrix/Eruaka/Ribbon Sprin...

  • SpringCloud 2.0 之 zuul

    官网:https://cloud.spring.io/spring-cloud-netflix/multi/mul...

  • SpringCloud 之 Zuul(网关)

    概述 网关 Api(接口) Gateway(网关)--接口网关:接口是没有界面的 网关概念: 相当于客户端发送的请...

  • SpringCloud组件之Zuul

    Zuul是Netflix开源的微服务网关,可以和Eureka、Ribbon、Hystrix等组件配合使用,Spri...

网友评论

      本文标题:SpringCloud学习(五)之Zuul

      本文链接:https://www.haomeiwen.com/subject/llumwctx.html