Spring Cloud学习之使用构建高可用Config Server

说明:

springboot 版本:1.5.12.Release

springcloud 版本:Dalston SR5

开发工具:eclipse-2018.12

1、新建maven父工程(要选择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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.scau</groupId>
    <artifactId>spring-cloud-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>spring-cloud-demo</name>

    <modules>
        <module>spring-cloud-eureka-server</module>
        <module>spring-cloud-eureka-provider-8086</module>
        <module>spring-cloud-config-server</module>
    </modules>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.12.RELEASE</version>
        <relativePath />
    </parent>

    <properties>

      <!-- 设置项目编码格式为 UTF-8 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Dalston.SR5</spring-cloud.version>
        <lombok.version>1.18.6</lombok.version>
    </properties>

    <dependencies>

        <!-- 端点监听依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

       <!-- 热部署依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </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>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>    

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <classifier>exec</classifier>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

2、在父工程下新建一个maven module,导入eureka-server相关依赖,作为服务注册中心

(1)修改pom.xml:

<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">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.scau</groupId>
        <artifactId>spring-cloud-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>spring-cloud-eureka-server</artifactId>

    <dependencies>

       <!-- 注意这里是eureka-server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
    </dependencies>
</project>

(2)在application.yml中配置Eureka Server

spring:
  profiles:
    active: dev
    
---
spring:
  profiles: dev
  application:
    name: eureka-server
    
server:
  port: 8761
 
#配置eureka服务注册中心    
eureka:
  client:
    service-url:
      defaultZone: http://localhost:${server.port}/eureka

    #不从eureka server上获取服务
    fetch-registry: false

   #不把本身注册到eureka server上
    register-with-eureka: false
#开启端点监控    
management:
  security:
    enabled: false

(3)在主启动类使用@EnableEurekaServer
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }

}

3、创建一个新的maven module,作为config server

(1)修改pom.xml,引入相关依赖

<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">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.scau</groupId>
    <artifactId>spring-cloud-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>spring-cloud-config-server</artifactId>
  
  <dependencies>
  <!-- 注意这里是config server -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
    <!-- 注意这里是eureka client -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
  </dependencies>
</project>

 (2)在resource下新建configs文件夹,来存放其他模块的配置文件(eg:eureka-provider-8086.yml)

(3)在application.yml中配置config server相关内容与服务注册url,将这个服务注册到eureka server中

server:
  port: 8769

#配置从类路径下的config文件夹下读取配置文件
spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        native:
          search-locations: classpath:configs        
  profiles:
    active:
    - native
#配置eureka服务注册中心
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
  instance:
    instance-id: config-server.com
    prefer-ip-address: true       
#开启端点监控
management:
  security:
    enabled: false

(4)在主启动类上使用@EnableConfigServer与@EnableEurekaClient
@EnableEurekaClient
@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }

}
4、再新建一个maven module,作为Eureka client(eg:这里命名为eureka-provider-8086)

(1)修改pom.xml

<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">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.scau</groupId>
    <artifactId>spring-cloud-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>spring-cloud-eureka-provider-8086</artifactId>
  
  <dependencies>
     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
     <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
  </dependencies>
</project>

(2)在bootstrap.yml(比application.yml拥有更高优先级)中配置从config server这个服务获取配置文件内容

spring:
  application:
    name: eureka-provider-8086 
    config-name: config-server
  #配置从服务名为config-server中获取配置 ,并且如果连接不上就快速失败
  cloud:
    config:
      discovery:
        enabled: true
        service-id: ${spring.application.config-name}
      fail-fast: true
      label: master
  profiles:
    active:
    - dev
#配置eureka服务注册中心 (PS:这里的服务注册中心要与config server的服务注册中心相同)
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
  instance:
    prefer-ip-address: true
    instance-id: eureka-provider-8086.com

(3)在主启动类上使用@EnableEurekaClient

@EnableEurekaClient
@SpringBootApplication
public class EurekaProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaProviderApplication.class, args);
    }
}

5、测试是否成功

(1)启动eureka server

 (2)启动config server

(3)启动eureka-provider-8086

 访问localhost:8761/eureka(即服务注册中心),如下

Spring Cloud学习之使用构建高可用Config Server

访问localhost:8086/info(刚才在eureka-provider-8086.yml中配置的端点信息),如下

Spring Cloud学习之使用构建高可用Config Server

      

到此:构建config server并作其作为 服务注册到eureka server就完成 了,不同版本的cloud可能配置有些不同;

发现有什么错误的话,请指出