• 5_spring-cloud-zuul-网关



    网关, 链路追踪

    • Zuul;
    • Sleuth;
    • https://start/aliyun.com
    • Zuul是Netflix开源的微服务网关,核心是一系列过滤器;
    • zuul默认集成了ribbon和hystrix;
    • 路由请求
    • 权限认证

    Zuul

    • 新建项目,引入依赖:需要使用 eureka-client-获取注册信息
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
    dependency>
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-netflix-zuulartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 完整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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0modelVersion>
        <parent>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-parentartifactId>
            <version>2.2.6.RELEASEversion>
            <relativePath/> 
        parent>
    
        <groupId>com.go.cngroupId>
        <artifactId>zuul-serverartifactId>
        <version>0.0.1-SNAPSHOTversion>
        <name>zuul-servername>
    
        <properties>
            <java.version>1.8java.version>
            <spring-cloud.version>Hoxton.SR3spring-cloud.version>
        properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starterartifactId>
            dependency>
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
            dependency>
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-starter-netflix-zuulartifactId>
            dependency>
    
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-testartifactId>
                <scope>testscope>
            dependency>
        dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloudgroupId>
                    <artifactId>spring-cloud-dependenciesartifactId>
                    <version>${spring-cloud.version}version>
                    <type>pomtype>
                    <scope>importscope>
                dependency>
            dependencies>
        dependencyManagement>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-maven-pluginartifactId>
                plugin>
            plugins>
        build>
    
    project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • @EnableZuulProxy
    • 配置文件修改:
    server:
      port: 80
    spring:
      application:
        name: zuul-server
    
    eureka:
      client:
        service-url:
          defaultZone: http://euk1.com:7000/eureka/
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • curl: 端口/服务名/uri;

    zuul 原理

    • 隧道模式; 代理模式;
    • 拒绝策略前置; 卫语句;
    • 网关会将服务名转换成具体服务的ip和端口;

    负载均衡设置

    • 默认负载策略为轮询策略;
    • 负载均衡配置文件调整:根据服务名调整:
    provider:
      ribbon:
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule  # 使用随机策略
    
    • 1
    • 2
    • 3

    配置指定服务的路由

    • 相当于一个别名,之前使用的 /服务名/** 依旧可用来访问;
    zuul:
      routes:
        consumer: /consumer-api/**
        # 或者
        # serviceId: consumer
        # path: /consumer-api/**
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    重定向:

    • 相当于给任意路径指定路由;相当于一个映射;
    • 此配置的优先级于服务名,也就是说指定的 url如果和服务同名会调用具体服务;不会走指定的url;
    zuul:
      routes:
        xx:
          path: /xx/**
          url: http://www.baidu.com
        search:
          path: /search/**
          url: http://www.baidu.com    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    忽略服务,禁止直接请求

    • 直接从网关请求会报404,但是 consumer 还是可以调用;
    zuul:
      ignored-services: provider
    
    • 1
    • 2

    前缀配置

    • 前缀,当请求匹配前缀时会进行代理;
    • 前缀配置会应用到所有路径;包括 注册的服务,也包括上面重定向中自定义的 url 路径;
    zuul:
      prefix: /api/v1
      # 是否带上前缀请求,代理前缀默认会从请求路径中移除,通过该设置关闭移除功能,
      # 默认为 true-不带前缀
      # false-带前缀相当于被代理项目要有这个前缀
      strip-prefix: false  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    暴露路由端点

    • 添加依赖:默认已经集成了actuator

    • 配置文件调整:暴露端点;

    management:
      endpoint:
        health:
          enabled: true
          show-details: always
        routes:
          enabled: true
      endpoints:
        web:
          exposure:
            include: '*'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • curl http://localhost/actuator/routes: 可以查看路由的映射结果;例如上边 前缀配置的生效范围就可以使用此路径进行查看:

    • {
          "/api/v1/consumer-api/**":"consumer",
          "/api/v1/xx/**":"http://www.baidu.com",
          "/api/v1/search/**":"http://www.baidu.com",
          "/api/v1/provider/**":"provider",
          "/api/v1/consumer/**":"consumer"
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
  • 相关阅读:
    你从未见过的,最全微服务架构实战详解,干货满满
    来不及细说,毕业三天靠Python兼职赚了两千
    yocto开发-常见的概念
    神经网络(五)卷积神经网络
    PAT 乙级 1052 卖个萌 python
    SSM整合-异常处理器和项目异常处理方案
    SystemVerilog Assertions应用指南 Chapter 11.5SVA检验器的时序窗口
    muc和soc的区别与联系
    PolarDB-X 全局 Binlog 解读之性能篇(上)
    Phar反序列化学习
  • 原文地址:https://blog.csdn.net/wwq921220/article/details/127146209