7-Spring cloud之路由网关zuul

1. 前言

2. 关于zuul

2.1 zuul基本原理

  • 网关(Zuul) —— 本质核心就是过滤器 ( 就这样一句话其实就够了)

    这些过滤器可以完成以下功能:

    • 身份认证与安全:识别每个资源的验证要求,并拒绝那些与要求不符的请求。
    • 审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生成视图。
    • 动态路由:动态地将请求路由到不同的后端集群。
    • 压力测试:逐渐增加执行集群的流量,以了解性能。
    • 负载分配:为每一种负载类型分配对应容量,并弃用超出限定值得请求。
    • 静态响应处理:在边缘位置直接建立部分响应,从而避免其转发到内部集群。
    • 多区域弹性:跨越AWS Region进行请求路由,旨在实现ELB(Elastic Load Balancing)使用的多样化,以及让系统的边缘更贴近系统的使用者。
    • 在实现了请求路由功能后,我们的微服务应用提供的接口就可以通过统一的API网关入口被客户端访问到了。但是,每个客户端用户请求为服务器应用提供的接口时,它们的访问权限往往都有一定的限制,系统并不会将所有的微服务接口都对它们开放。
    • 在完成了服务路由之后,我们对外开放服务还需要一些安全措施来保护客户端只能访问它应该访问到的资源。所以我们需要利用Zuul的过滤器来实现我们对外服务的安全控制。
  • 在服务网关中定义过滤器只需要继承ZuulFilter抽象类实现其定义的四个抽象函数就可对请求进行拦截与过滤。

  • 更多讲解参考下面的文章:
    微服务:网关(zuul) —— 基本原理、配置、鉴权、限制IP、限流.

2.2 为什么要使用zuul

3. 搭建zuul

3.1 项目结构

  • 如下:
    在这里插入图片描述

3.2 基本配置

3.2.1 pom文件

  • 如下:
    在这里插入图片描述

    <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">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>com.liu.susu</groupId>
            <artifactId>dog-cloud-parent</artifactId>
            <version>1.0-SNAPSHOT</version>
        </parent>
    
        <artifactId>dog-gateway-zuul-8090</artifactId>
        <packaging>jar</packaging>
    
        <name>dog-gateway-zuul-8090</name>
        <url>http://maven.apache.org</url>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>com.liu.susu</groupId>
                <artifactId>dog-api</artifactId>
                <version>${project.version}</version>
            </dependency>
    
            <!--zuul相关的-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-zuul</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
            </dependency>
    
            <!--actuator监控-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <!--容错hystrix-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-hystrix</artifactId>
            </dependency>
            <!--下面这几个,版本同${spring-boot.version}-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
        </dependencies>
    </project>
    
    

3.2.2 yml文件

  • 如下:
    在这里插入图片描述

    server:
      port: 8090  # #网关的端口号
    
    spring:
      application:
        name: dog-gateway-zuul # #网关在注册中心的唯一名称
    
    eureka:
      client:  # 客户端注册进eureka服务列表内
        register-with-eureka: true  # false表示不向注册中心注册自己
        service-url:
          defaultZone: http://62.234.14.112:2886/eureka/,http://58.87.88.142:2886/eureka,http://154.8.150.175:2886/eureka/
      instance:
        instance-id: dog-gateway-zuul-8090
    #    prefer-ip-address: true
    
    

3.3.3 启动类

  • 如下:

    @SpringBootApplication
    @EnableEurekaClient
    @EnableZuulProxy  
    

    在这里插入图片描述

3.3 测试看效果

3.3.1 演示

  • 首先,启动Eureka集群,和服务提供者,然后启动zuul,我这里Eureka集群和服务提供者一直在服务器上没有停过,所以直接启动本地zuul,如下:
    在这里插入图片描述
  • 再确保直接访问服务提供者是通的,如下:
    在这里插入图片描述
  • 然后通过zuul访问,zuul还自带了负载均衡,如下:
    // http://zuul_host:zuul_port/微服务在Eureka 注册中心上的服务提供者(对应的application.name)/接口映射地址
    // 本地的话,如下3种访问均可
    
    http://localhost:8090/dog-provider/dog/getDogByNum/1
    http://127.0.0.1:8090/dog-provider/dog/getDogByNum/1
    http://192.168.1.101:8090/dog-provider/dog/getDogByNum/1
    
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

3.3.1 架构图

  • 简单架构,如下

在这里插入图片描述

4. zuul路由访问映射规则

4.1 映射服务提供者的服务名

  • 配置如下:
    在这里插入图片描述

    zuul:
      routes:
        zuulDog.serviceId: dog-provider   # dog-provider 是服务提供者的服务名
        zuulDog.path: /myDog/**
      #  ignored-services: dog-provider  #禁止通过此服务名访问,即 http://localhost:8090/dog-provider/dog/getDogByNum/1 不再可访问
      ignored-services: "*"   # 忽略多个微服务的情况
    
  • 访问效果如下:

    // http://localhost:8090/dog-provider/dog/getDogByNum/1   没映射前的访问,暴漏了服务提供者名
    http://localhost:8090/myDog/dog/getDogByNum/1   //myDog 随便映射
    

    在这里插入图片描述

4.2 访问加前缀

  • 如下:
zuul:
  routes:
    zuulDog.serviceId: dog-provider   # dog-provider 是服务提供者的服务名
    zuulDog.path: /myDog/**
#  ignored-services: dog-provider  #禁止通过此服务名访问,即 http://localhost:8090/dog-provider/dog/getDogByNum/1 不再可访问
  ignored-services: "*"   # 忽略多个微服务的情况
  prefix: /susu  # 加前缀

在这里插入图片描述

5.

猜你喜欢

转载自blog.csdn.net/suixinfeixiangfei/article/details/131768504
今日推荐