zoukankan      html  css  js  c++  java
  • Spring Cloud(Dalston.SR5)--Zuul 网关-微服务集群

    通过 url 映射的方式来实现 zuul 的转发有局限性,比如每增加一个服务就需要配置一条内容,另外后端的服务如果是动态来提供,就不能采用这种方案来配置了。实际上在实现微服务架构时,服务名与服务实例地址的关系在 eureka server 中已经存在了,所以只需要将Zuul注册到 eureka server上去发现其他服务,就可以实现对 serviceId 的映射,并且启用了 eureka server 同时也会启用 ribbon 对服务进行负载均衡调用,加入 Zuul 到微服务集群架构图如下:

    Zuul 微服务网关集群示例

    • 创建项目

      创建名为 spring-cloud-zuul-microservices 的 Spring Cloud 项目,并增加 zuul、eureka 依赖,修改 POM.xml 中增加以下依赖项:

      <?xmlversion="1.0"encoding="UTF-8"?>

      <projectxmlns="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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">

      <modelVersion>4.0.0</modelVersion>

         

      <groupId>org.lixue.zuul</groupId>

      <artifactId>spring-cloud-zuul-microservices</artifactId>

      <version>0.0.1-SNAPSHOT</version>

      <packaging>jar</packaging>

         

      <name>spring-cloud-zuul-microservices</name>

         

      <parent>

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

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

      <version>1.5.12.RELEASE</version>

      <relativePath/><!--lookupparentfromrepository-->

      </parent>

         

      <properties>

      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

      <java.version>1.8</java.version>

      <spring-cloud.version>Dalston.SR5</spring-cloud.version>

      </properties>

         

      <dependencies>

      <dependency>

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

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

      </dependency>

      <dependency>

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

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

      </dependency>

         

      <dependency>

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

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

      <scope>test</scope>

      </dependency>

      </dependencies>

         

      <dependencyManagement>

      <dependencies>

      <dependency>

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

      <artifactId>spring-cloud-dependencies</artifactId>

      <version>${spring-cloud.version}</version>

      <type>pom</type>

      <scope>import</scope>

      </dependency>

      </dependencies>

      </dependencyManagement>

         

      <build>

      <plugins>

      <plugin>

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

      <artifactId>spring-boot-maven-plugin</artifactId>

      </plugin>

      </plugins>

      </build>

      </project>

         

    • 启用 Zuul

      在启动类上使用注解 @EnableZuulProxy 标注类,即开启 Zuul 功能。

         

      package org.lixue.zuul;

         

      import org.springframework.boot.SpringApplication;

      import org.springframework.boot.autoconfigure.SpringBootApplication;

      import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

      import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

         

      @EnableZuulProxy

      @SpringBootApplication

      public class SpringCloudZuulMicroservicesApplication{

         

      public static void main(String[]args){

      SpringApplication.run(SpringCloudZuulMicroservicesApplication.class,args);

      }

      }

         

    • 增加配置

      如果配置了 serviceId 或者 url 的配置项不是简单的路由格式(不以 http: 或 https:开头),也不是跳转路由格式(forward:开头),那么就会执行 ribbon 路由过滤器。

      #配置应用名称

      spring:

      application:

      name: spring-cloud-zuul-microservices

      #配置服务端口

      server:

      port:9200

      #设置eureka服务注册中心的地址,如果多个以逗号分割

      eureka:

      client:

      service-url:

      #defaultZone表示默认的区域的eureka服务地址,多个使用逗号分割

      defaultZone:http://eurekaserver01:9000/eureka/,#http://eurekaserver02:9000/eureka/

      #zuul路由配置

      zuul:

      routes:

      #表示http://localhost:9100/hello/speaks地址,路由到http://HELLOWORLD-PROVIDER/speaks,其中具体地址是通过eureka获取

      hello:

      path: /hello/**

      #或者使用url:HELLOWORLD-PROVIDER含义一样

      serviceId: HELLOWORLD-PROVIDER

    • 测试验证

      该项目依赖一个eureka-sserver、service-provider 服务,首先启动 eureka-server 和 多个 service-provider 服务,然后启动 spring-cloud-zuul-microservices 服务,访问 http://localhost:9200/hello/speaks?names=123 ,并多次刷新,可以看到分别访问了不同的 service-provider 服务,输出如下:

      {"123":"Hello World 123 Port=8080"}

      {"123":"Hello World 123 Port=8002"}

      {"123":"Hello World 123 Port=8001"}

         

         

       

       

       

  • 相关阅读:
    VSCode集成TypeScript编译
    http模拟登陆及发请求
    1​1​.​0​5​9​2​M​晶​振​与12M晶振
    单片机定时器2使用
    Altium Designer 小记
    sql-mysql
    java英文缩写
    Altium Design
    Tomcat使用
    jar/war/ear文件的区别
  • 原文地址:https://www.cnblogs.com/li3807/p/8916852.html
Copyright © 2011-2022 走看看