十、zuul路由网关

(了解内容,上面神仙打架,下面程序员遭殃)

1、概述简介

  • 官网资料

    • https://github.com/Netflix/zuul/wiki/Getting-Started
    • https://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/2.2.1.RELEASE/reference/html/#router-and-filter-zuul
  • 是什么

    Zuul是一种提供动态路由、监视、弹性、安全性等功能的边缘服务。
    Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器。

    API网关为微服务架构中的服务提供了统一的访问入口,客户端通过API网关访问相关服务。API网关的定义类似于设计模式中的门面模式,它相当于整个微服务架构中的门面,所有客户端的访问都通过它来进行路由及过滤。它实现了请求路由、负载均衡、校验过滤、服务容错、服务聚合等功能。

    Zuul包含了如下最主要的功能:
    代理+路由+过滤三大功能

  • 能干嘛

    • 路由

    • 过滤

    • 负载均衡

    • 灰度发布

      又称金丝雀发布

      起源是,矿井工人发现,金丝雀对瓦斯气体很敏感,矿工会在下井之前,先放一只金丝雀到井中,如果金丝雀不叫了,就代表瓦斯浓度高。

    在灰度发布开始后,先启动一个新版本应用,但是并不直接将流量切过来,而是测试人员对新版本进行线上测试,启动的这个新版本应用,就是我们的金丝雀。如果没有问题,那么可以将少量的用户流量导入到新版本上,然后再对新版本做运行状态观察,收集各种运行时数据,如果此时对新旧版本做各种数据对比,就是所谓的A/B测试。新版本没什么问题,那么逐步扩大范围、流量,把所有用户都迁移到新版本上面来。

2、路由基本配置

  • 功能

    路由功能负责将外部请求转发到具体的服务实例上去,是实现统一访问入口的基础

  • 新建Module模块cloud-zuul-gateway9527

  • POM

    
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>mscloud</artifactId><groupId>com.likun.springcloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>cloud-zuul-gateway9527</artifactId><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies></project>
  • YML

    server:port: 9527spring:application:name: cloud-zuul-gatewayeureka:client:service-url:#defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eurekadefaultZone: http://eureka7001.com:7001/eurekainstance:instance-id: gateway-9527.comprefer-ip-address: true 
  • hosts修改

    127.0.0.1 myzuul.com

  • 主启动类**@EnableZuulProxy**

    package com.likun.springcloud;import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.zuul.EnableZuulProxy;@SpringBootApplication
    @EnableZuulProxy
    public class Zuul_9527_StartSpringCloudApp
    {public static void main(String[] args){SpringApplication.run(Zuul_9527_StartSpringCloudApp.class, args);}
    }
  • 启动

  • 测试

    • 不用路由 http://localhost:8001/paymentInfo

    • 启用路由 zuul映射配置+注册中心注册后对外暴露的服务名称+rest调用地址

      http://myzuul.com:9527/cloud-provider-payment/paymentInfo

3、路由访问映射规则

  • 工程microservicecloud-zuul-gateway-9527

  • 代理名称

    • YML

      before
      http://myzuul.com:9527/cloud-provider-payment/paymentInfo

       zuul:routes: # 路由映射配置mypayment.path: /mypayment/**                 #IE地址栏输入的路径mypayment.serviceId: cloud-provider-payment   #注册进eureka服务器的地址
      

      after
      http://myzuul.com:9527/weixin/paymentInfo

    • 此时问题

      • 路由访问OK http://myzuul.com:9527/weixin/paymentInfo
      • 原路径访问OK http://myzuul.com:9527/cloud-provider-payment/paymentInfo
  • 如果不想使用默认的路由规则,可以添加以下配置来忽略默认路由配置

  • 原有真实服务名忽略

    • YML

      zuul: ignored-services: "*"routes: mydept.serviceId: microservicecloud-deptmydept.path: /mydept/**
    • 上一步配置后,cloud-provider-payment就不行了 http://myzuul.com:9527/cloud-provider-payment/paymentInfo

    • 单个具体,多个可以用"*"

      zuul: ignored-services: "*"routes: mydept.serviceId: microservicecloud-deptmydept.path: /mydept/**
      
  • 路由转发和负载均衡功能

    • 服务提供者SMS短信模块

      • 建模块cloud-provider-sms8008

      • POM

        <?xml version="1.0" encoding="UTF-8"?>
        <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>mscloud</artifactId><groupId>com.likun.springcloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>cloud-provider-sms8008</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
        </project>
        
      • YML

        server:port: 8008###服务名称(服务注册到eureka名称)spring:application:name: cloud-provider-smseureka:client: #服务提供者provider注册进eureka服务列表内service-url:register-with-eureka: truefetch-registry: truedefaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka#defaultZone: http://127.0.0.1:7001/eureka,http://127.0.0.1:7002/eureka#defaultZone: http://eureka7001.com:7001/eureka   # eureka集群加@老本版
      • 业务类

        package com.likun.springcloud.controller;import org.springframework.beans.factory.annotation.Value;
        import org.springframework.web.bind.annotation.ControllerAdvice;
        import org.springframework.web.bind.annotation.GetMapping;
        import org.springframework.web.bind.annotation.RestController;/*** @auther likun* @create 2021-04-29 14:35*/
        @RestController
        public class SMSController
        {@Value("${server.port}")private String serverPort;@GetMapping("/sms")public String sms(){return "sms provider service: "+"\t"+serverPort;}
        }
      • 主启动

        package com.likun.springcloud;import org.springframework.boot.SpringApplication;
        import org.springframework.boot.autoconfigure.SpringBootApplication;
        import org.springframework.cloud.netflix.eureka.EnableEurekaClient;/*** @auther zzyy* @create 2019-04-14 14:34*/
        @SpringBootApplication
        @EnableEurekaClient
        public class MainAppSMS8008
        {public static void main(String[] args){SpringApplication.run(MainAppSMS8008.class,args);}
        }
      • 启动8008并成功注册进eureka服务器上

    • 修改我们的zuul服务9527

      • 修改YML,体现路由转发和负载均衡

      • YML

        server:port: 9527spring:application:name: cloud-zuul-gatewayeureka:client:service-url:#defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eurekadefaultZone: http://eureka7001.com:7001/eurekainstance:instance-id: gateway-9527.comprefer-ip-address: truezuul:#ignored-services: cloud-provider-paymentroutes: # 路由映射配置mypayment.serviceId: cloud-provider-paymentmypayment.path: /weixin/**mysms.serviceId: cloud-provider-smsmysms.path: /mysms/**
      • 由于Zuul自动集成了Ribbon和Hystrix,所以Zuul天生就有负载均衡和服务容错能力

    • 测试

      • http://myzuul.com:9527/weixin/paymentInfo 负载均衡
      • http://myzuul.com:9527/mysms/sms 路由转发
      • 微信服务找8001/8002
      • 短信服务找8008
  • 设置统一公共前缀

    • YML
    • http://myzuul.com:9527/likun/weixin/paymentInfo
    • http://myzuul.com:9527/likun/mysms/sms
    • http://myzuul.com:9527/likun/cloud-provider-payment/paymentInfo
  • 最后YML

    server:port: 9527spring:application:name: cloud-zuul-gatewayeureka:client:service-url:#defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eurekadefaultZone: http://eureka7001.com:7001/eurekainstance:instance-id: gateway-9527.comprefer-ip-address: truezuul:#ignored-services: cloud-provider-paymentprefix: /likunroutes: # 路由映射配置mypayment.serviceId: cloud-provider-paymentmypayment.path: /weixin/**mysms.serviceId: cloud-provider-smsmysms.path: /mysms/**

4、查看路由信息

  • POM

    
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
  • YML

    
    # 开启查看路由的端点
    management:endpoints:web:exposure:include: 'routes' 
  • 查看路由详细信息

    http://localhost:9527/actuator/routes

5、过滤器

  • 功能

    过滤功能负责对请求过程进行额外的处理,是请求校验过滤及服务聚合的基础。

  • 过滤器的生命周期

  • ZuulFilter

    • 过滤类型

      • pre:在请求被路由到目标服务前执行,比如权限校验、打印日志等功能;
      • routing:在请求被路由到目标服务时执行
      • post:在请求被路由到目标服务后执行,比如给目标服务的响应添加头信息,收集统计数据等功能;
      • error:请求在其他阶段发生错误时执行。
    • 过滤顺序

      数字小的先执行

    • 过滤是否开启

      shouldFilter方法为true

    • 执行逻辑

      自己的业务逻辑

  • 案例Case

    • 前置过滤器,用于在请求路由到目标服务前打印请求日志

    • 业务代码

    • 测试

      • http://myzuul.com:9527/likun/mysms/sms
      • 在调用8008之前会打印日志
    • 开关,YML配置

(完)

SpringCloud第十章zuul路由网关相关推荐

  1. SpringCloud学习系列之七 ----- Zuul路由网关的过滤器和异常处理

    前言 在上篇中介绍了SpringCloud Zuul路由网关的基本使用版本,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的路由 ...

  2. 跟着狂神学SpringCloud(Rest环境搭建+Eureka服务注册与发现+ribbon+Feign负载均衡+Hystrix+服务熔断+Zuul路由网关+SpringCloud config分布)

    跟着狂神学SpringCloud SpringCloud 回顾之前的知识- JavaSE 数据库 前端 Servlet Http Mybatis Spring SpringMVC SpringBoot ...

  3. 【七】zuul路由网关

    一.zuul是什么?zuul 包含以下两个最主要的功能:1.路由功能: 负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础.2.过滤器功能: 则负责对请求的处理过程进行干预,是实现请 ...

  4. Zuul路由网关--配置讲解

    1:什么是zuul,用什么用? Zuul是Netflix开源的微服务网关,可以和Eureka.Ribbon.Hystrix等组件配合使用,Spring Cloud对Zuul进行了整合与增强,Zuul的 ...

  5. Spring Cloud(八)Zuul路由网关

    文章目录 1 概述 1.1 什么是Zuul 1.2 为什么要建造Zuul 1.3 Zuul有哪些功能 1.4 理解 2 Zuul路由功能 2.1 创建zuul服务 2.2 测试 2.3 路由访问映射规 ...

  6. 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)

    转:https://blog.csdn.net/forezp/article/details/69939114 最新版本: 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)( ...

  7. springcloud 之 路由网关 zuul

    话不多说,先上图(图是丑陋了点,大家别介意哈),这幅图是我根据公司现有的业务设计出来的一个简单的基于springcloud微服务架构图. 在springcloud微服务体系中,我们一般不对外直接暴露服 ...

  8. 【SpringCloud】第五篇: 路由网关(zuul)

    前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...

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

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

  10. SpringCloud微服务Zuul网关动态路由

    SpringCloud微服务Zuul网关动态路由 zuul动态路由 1. 网关层动态配置路由映射规则 2. 将同一个请求根据自定义的规则,路由到不同服务中 FeignClient动态请求 实现功能 实 ...

最新文章

  1. nginx rails 详细站点配置入门教程
  2. Hive UDF初探
  3. 解决maven找不到jdk的问题
  4. python3 进程
  5. 锐捷升级最新版本出现虚拟网卡安装失败?
  6. 深入解析PHP中逗号与点号的区别
  7. 观察者模式Observer
  8. Web之http协议(一)
  9. python变量赋值
  10. Vue2.0 之 自带浏览器里无法打开(兼容IE处理) - 解决方案 命令
  11. “编程能力差,90%输在了这点上!”阿里巴巴工程师:其实都是瞎努力!
  12. Oracle中监听程序无法识别连接描述符中的请求的服务解决办法
  13. SpringBoot @Async注解的学习
  14. Oracle中使用批处理文件批量建表
  15. C语言程序设计课题分析,C语言程序设计综合实践性教学课题报告.doc
  16. 华为太极magisk安装教程_【玩机必会技能】小米手机通用刷TWRP RECOVERY|ROOT|刷第三方ROM教程...
  17. 手机远程启动热车!汽车远程启动有什么缺点?你都知道吗汽车手机远程启动优缺点,汽车手机远程启动怎么用,
  18. javaweb笔记(方立勋)
  19. csp怎么给线条描边,插画师要失业了?还在纠结阴影怎么画?CSP软件能直接自动生成...
  20. 7.4 反编译、篡改漏洞检测和重现

热门文章

  1. css代码中的ul和li是什么意思呢
  2. Idea编译提示Java找不到符号解决方式
  3. Ransac算法原理,步骤,代码,实例,转载总结
  4. 数据库数据误删除恢复
  5. C#实现Omron欧姆龙PLC的Fins Tcp协议
  6. 511 排序预演_最小数简单置前
  7. Unity跳一跳小游戏简单代码
  8. 2020爬取美赛数学成绩
  9. android 微博 登录,Android第三方登录之微博登录
  10. 混沌图像---陈氏吸引子的飞蛾