• 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。

  • 相关阅读:
    gcc 使用中常用的参数及命令
    Android build system & Android.mk 规范
    ndkgdb对java/native code联合调试
    Android NDK开发指南(一) Application.mk文件
    字符编码知识:Unicode、UTF8、ASCII、GB2312等编码 及 转换
    C & C++ 中值得注意的编译,链接,调试,错误及其原因
    JNI 调用规范
    Graphic 矢量图形的区域填充与缠绕规则
    Android NDK开发指南(二)Android.mk文件
    JNI 之二 :java & c/c++ 相互通信及调用
  • 原文地址:https://www.cnblogs.com/idoljames/p/11620616.html
Copyright © 2020-2023  润新知