• 8、Spring Cloud Zuul


    1.Zuul简介

      Zuul包含了对请求的路由过滤两个最主要的功能。

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

      过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础。

      Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。

      注:Zuul服务最终还是会注册进Eureka

      Zuul提供代理、路由、过滤三大功能。

    https://github.com/Netflix/zuul/wiki/Getting-Started

    2.Zuul配置

     

    (1).创建工程

      新建Module模块microservicecloud-zuul-gateway-9527

     

     

    (2).配置pom

    [1].修改部分

    <!-- 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>

    [2].完整部分

    <?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>microservicecloud</artifactId>

            <groupId>com.hosystem</groupId>

            <version>1.0-SNAPSHOT</version>

        </parent>

        <modelVersion>4.0.0</modelVersion>

     

        <artifactId>microservicecloud-zuul-gateway-9527</artifactId>

        <dependencies>

            <!-- 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>

            <dependency>

                <groupId>org.springframework.cloud</groupId>

                <artifactId>spring-cloud-starter-config</artifactId>

            </dependency>

            <!-- 日常标配 -->

            <dependency>

                <groupId>com.atguigu.springcloud</groupId>

                <artifactId>microservicecloud-api</artifactId>

                <version>${project.version}</version>

            </dependency>

            <dependency>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-starter-jetty</artifactId>

            </dependency>

            <dependency>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-starter-web</artifactId>

            </dependency>

            <dependency>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-starter-test</artifactId>

            </dependency>

            <!-- 热部署插件 -->

            <dependency>

                <groupId>org.springframework</groupId>

                <artifactId>springloaded</artifactId>

            </dependency>

            <dependency>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-devtools</artifactId>

            </dependency>

        </dependencies>

     

    </project>

    (3).applicaiton.yml

    server:

      port: 9527

     

    spring:

      application:

        name: microservicecloud-zuul-gateway

     

    eureka:

      client:

        service-url:

          defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka  

      instance:

        instance-id: gateway-9527.com

        prefer-ip-address: true

     

     

    info:

      app.name: hosystem-microcloud

      company.name: www.hosystem.com

      build.artifactId: $project.artifactId$

      build.version: $project.version$

    (4).修改hosts

    127.0.0.1  myzuul.com

     

    (5).主启动类

      创建主启动类Zuul_9527_StartSpringCloudApp,并添加注解@EnableZuulProxy.

    package com.hosystem.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);

        }

    }

    (6).启动项目

    [1].启动eureka7001、eureka7002、eureka7003

      启动microservicecloud-eureka-7001、microservicecloud-eureka-7002、microservicecloud-eureka-7003

     

    [2].启动provider8001

      启动microservicecloud-provider-dept-8001

     

    [3].启动zuul9527

      启动microservicecloud-zuul-gateway-9527

     

    (7).测试

    [1].未启用路由

    http://localhost:8001/dept/get/2

     

    [2].启动路由

    http://myzuul.com:9527/microservicecloud-dept/dept/get/2

     

    3.Zuul路由访问映射规则

     

    (1).修改application.yml

      修改部分:

    zuul:

      routes:

        mydept.serviceId: microservicecloud-dept

        mydept.path: /mydept/**

      完整部分:

    server:

      port: 9527

     

    spring:

      application:

        name: microservicecloud-zuul-gateway

     

    eureka:

      client:

        service-url:

          defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka

      instance:

        instance-id: gateway-9527.com

        prefer-ip-address: true

     

    zuul:

      routes:

        mydept.serviceId: microservicecloud-dept

        mydept.path: /mydept/**

     

    info:

      app.name: hosystem-microcloud

      company.name: www.hosystem.com

      build.artifactId: $project.artifactId$

      build.version: $project.version$

      访问效果

    #之前访问的时候通过'microservicecloud-dept‘

    http://myzuul.com:9527/microservicecloud-dept/dept/get/2

     

    #之后访问的时候通过'mydept'

    http://myzuul.com:9527/mydept/dept/get/1

      出现的问题,通过'microservicecloud-dept‘或者'mydept'都可以访问。如何限制只允许'mydept'访问,而'microservicecloud-dept'访问失败呢?具体解决方法如下,

    #解决单个的时候指定具体的servideId

    #如果想要解决多个的时候可以使用   "*"

    zuul:

      ignored-services: microservicecloud-dept

      routes:

        mydept.serviceId: microservicecloud-dept

        mydept.path: /mydept/**

     

      统一公共前缀

    zuul:

      prefix: /hosystem

      ignored-services: "*"

      routes:

        mydept.serviceId: microservicecloud-dept

        mydept.path: /mydept/**

     

      完整的applicaiton.yml文件

    server:

      port: 9527

     

    spring:

      application:

        name: microservicecloud-zuul-gateway

     

    eureka:

      client:

        service-url:

          defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka

      instance:

        instance-id: gateway-9527.com

        prefer-ip-address: true

     

    zuul:

      prefix: /hosystem

      ignored-services: "*"

      routes:

        mydept.serviceId: microservicecloud-dept

        mydept.path: /mydept/**

     

    info:

      app.name: hosystem-microcloud

      company.name: www.hosystem.com

      build.artifactId: $project.artifactId$

      build.version: $project.version$

    参考文档:

    https://github.com/Netflix/zuul/wiki/Getting-Started

  • 相关阅读:
    而字歌
    排列组合的学习,基础入门,选修2-3
    金句集(目前9句)
    简析几何叉乘与安培力的内在逻辑
    浅谈参变分离的妙用
    日语
    Tarjan-SCC-NOIP2015message
    WebAPI身份验证
    简单记录在Visual Studio 2013中创建ASP.NET Web API 2
    从两个平方算法到分治算法-java
  • 原文地址:https://www.cnblogs.com/HOsystem/p/14057487.html
Copyright © 2020-2023  润新知