zoukankan      html  css  js  c++  java
  • Eureka【构建Multi Zone Eureka Server】

    工程pom中公共依赖

    <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>Finchley.RELEASE</spring-cloud.version>
    </properties>
    
    <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>

    1、Eureka Server工程

    启动4个实例,配置两个zone,即zone1、zone2,每个zone都要2个eureka server实例,这个2个zone配置在同一个region上,即region-east。

    1.1、eureka-server工程pom文件:

    <!--加上文章头部的公共依赖-->

    <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>

    1.2、eureka-server工程启动类

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    @SpringBootApplication
    @EnableEurekaServer
    public class EurekaServerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(EurekaServerApplication.class, args);
        }
    }

    1.3、eureka-server工程配置文件,路径:eureka-serversrcmain esources,分别有5个文件:application-zone1a.yml,application-zone1b.yml,application-zone2a.yml,application-zone2b.yml,application.yml

    application-zone1a.yml:

    server:
      port: 8761
    spring:
      application:
        name: eureka-server
    eureka:
      instance:
        hostname: localhost
        preferIpAddress: true
        metadataMap.zone: zone1
      client:
        register-with-eureka: true
        fetch-registry: true
        region: region-east
        service-url:
          zone1: http://localhost:8761/eureka/,http://localhost:8762/eureka/
          zone2: http://localhost:8763/eureka/,http://localhost:8764/eureka/
        availability-zones:
          region-east: zone1,zone2
      server:
          waitTimeInMsWhenSyncEmpty: 0
          enableSelfPreservation: false

    application-zone1b.yml

    server:
      port: 8762
    spring:
      application:
        name: eureka-server
    eureka:
      instance:
        hostname: localhost
        preferIpAddress: true
        metadataMap.zone: zone1
      client:
        register-with-eureka: true
        fetch-registry: true
        region: region-east
        service-url:
          zone1: http://localhost:8761/eureka/,http://localhost:8762/eureka/
          zone2: http://localhost:8763/eureka/,http://localhost:8764/eureka/
        availability-zones:
          region-east: zone1,zone2
      server:
          waitTimeInMsWhenSyncEmpty: 0
          enableSelfPreservation: false

    application-zone2a.yml

    server:
      port: 8763
    spring:
      application:
        name: eureka-server
    eureka:
      instance:
        hostname: localhost
        preferIpAddress: true
        metadataMap.zone: zone2
      client:
        register-with-eureka: true
        fetch-registry: true
        region: region-east
        service-url:
          zone1: http://localhost:8761/eureka/,http://localhost:8762/eureka/
          zone2: http://localhost:8763/eureka/,http://localhost:8764/eureka/
        availability-zones:
          region-east: zone1,zone2
      server:
          waitTimeInMsWhenSyncEmpty: 0
          enableSelfPreservation: false

    application-zone2b.yml

    server:
      port: 8764
    spring:
      application:
        name: eureka-server
    eureka:
      instance:
        hostname: localhost
        preferIpAddress: true
        metadataMap.zone: zone2
      client:
        register-with-eureka: true
        fetch-registry: true
        region: region-east
        service-url:
          zone1: http://localhost:8761/eureka/,http://localhost:8762/eureka/
          zone2: http://localhost:8763/eureka/,http://localhost:8764/eureka/
        availability-zones:
          region-east: zone1,zone2
      server:
          waitTimeInMsWhenSyncEmpty: 0
          enableSelfPreservation: false

    application.yml

    eureka:
      server:
        use-read-only-response-cache: false
        response-cache-auto-expiration-in-seconds: 10
    management:
      endpoints:
        web:
          exposure:
            include: '*'

    从上面的4个配置文件可以看出,我们通过eureka.instance.metadataMap.zone设置了每个实例所属的zone,接下来使用这4个配置启动4个eureka server实例:

    //启动命令
    mvn spring-boot:run -Dspring.profiles.active=zone1a mvn spring-boot:run -Dspring.profiles.active=zone1b mvn spring-boot:run -Dspring.profiles.active=zone2a mvn spring-boot:run -Dspring.profiles.active=zone2b

    2、Eureka Client工程

    这里配置2个eureka clent,分别属于zone1和zone2。

    2.1、eureka-client工程pom文件

    <!--加上文章头部公共配置-->

    <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>

    2.1、eureka-client工程启动类

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @SpringBootApplication
    @EnableDiscoveryClient
    public class EurekaClientApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(EurekaClientApplication.class, args);
        }
    }

    2.2、eureka-client工程配置文件,路径:eureka-clientsrcmain esources,共3个文件:application.yml,application-zone1.yml,application-zone2.yml

    application.yml:

    #这里暴露所有的endpoints,便于后面验证
    management: endpoints: web: exposure: include:
    '*'

    application-zone1.yml:

    server:
      port: 8081
    spring:
      application:
        name: client
    eureka:
      instance:
        metadataMap.zone: zone1
      client:
        register-with-eureka: true
        fetch-registry: true
        region: region-east
        service-url:
          zone1: http://localhost:8761/eureka/,http://localhost:8762/eureka/
          zone2: http://localhost:8763/eureka/,http://localhost:8764/eureka/
        availability-zones:
          region-east: zone1,zone2

    application-zone2.yml:

    server:
      port: 8082
    spring:
      application:
        name: client
    eureka:
      instance:
        metadataMap.zone: zone2
      client:
        register-with-eureka: true
        fetch-registry: true
        region: region-east
        service-url:
          zone1: http://localhost:8761/eureka/,http://localhost:8762/eureka/
          zone2: http://localhost:8763/eureka/,http://localhost:8764/eureka/
        availability-zones:
          region-east: zone1,zone2

    2.3、启动eureka client,执行命令,启动2个实例:

    mvn spring-boot:run -Dspring.profiles.active=zone1
    mvn spring-boot:run -Dspring.profiles.active=zone2

    3、Zuul Gateway工程

    这里新建一个zuul网关工程,来演示metadataMap的zone属性中ZoneAffinity特性。

    3.1、zuul gateway工程,pom文件:

    <!--加上文章头部的公共依赖-->

    <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>

    3.2、zuul gateway工程启动类:

    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;
    
    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableZuulProxy
    public class ZuulGatewayApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ZuulGatewayApplication.class, args);
        }
    }

    3.3、zuul gateway工程配置文件,路径:zuul-gatewaysrcmain esources,一共3个文件:application.yml,application-zone1.yml,application-zone2.yml

    application.yml:

    spring:
      application:
        name: zuul-gateway
    management:
      endpoints:
        web:
          exposure:
            include: '*'

    application-zone1.yml:

    server:
      port: 10001
    eureka:
      instance:
        metadataMap.zone: zone1
      client:
        register-with-eureka: true
        fetch-registry: true
        region: region-east
        service-url:
          zone1: http://localhost:8761/eureka/,http://localhost:8762/eureka/
          zone2: http://localhost:8763/eureka/,http://localhost:8764/eureka/
        availability-zones:
          region-east: zone1,zone2

    application-zone2.yml:

    server:
      port: 10002
    eureka:
      instance:
        metadataMap.zone: zone2
      client:
        register-with-eureka: true
        fetch-registry: true
        region: region-east
        service-url:
          zone1: http://localhost:8761/eureka/,http://localhost:8762/eureka/
          zone2: http://localhost:8763/eureka/,http://localhost:8764/eureka/
        availability-zones:
          region-east: zone1,zone2

    3.4、启动zuul gateway工程,一共2个实例,执行命令:

    mvn spring-boot:run -Dspring.profiles.active=zone1
    mvn spring-boot:run -Dspring.profiles.active=zone2

    验证ZoneAffinity,访问:localhost:10001/client/actuator/env,结果:

     访问:localhost:10002/client/actuator/env,结果:

     可以看出请求网关/client/actuator/env,访问的是eureka client实例的/actuator/env接口,处于zone1的Gateway返回的activeProfiles为zone1,处于zone2的Gateway返回的activeProfiles是zone2。

  • 相关阅读:
    js截取字符串区分汉字字母代码
    List 去处自定义重复对象方法
    63. Unique Paths II
    62. Unique Paths
    388. Longest Absolute File Path
    41. First Missing Positive
    140. Word Break II
    139. Word Break
    239. Sliding Window Maximum
    5. Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/idoljames/p/11620616.html
Copyright © 2011-2022 走看看