程序员社区

SpringCloud构建微服务之SpringCloudConfig配置中心高可用

前言

在上篇文章我们讲解了使用客户端直接调用配置中心服务端来获取配置文件信息,但是这样客户端和服务耦合性就太高了,不利于维护和扩展。那么该怎么样处理呢?我们只需将配置中心服务端注册到eureka中,客户端直接从eureka集群中获取配置中心服务即可。

下面我们来动手实现。

server端改造

修改spring-cloud-config-serverpom文件,引入eureka依赖:

<?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>spring-cloud-config</artifactId>
        <groupId>com.chaytech</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spring-cloud-config-server</artifactId>
    <packaging>jar</packaging>

    <dependencies>
        <!--spring cloud config-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>

        <!--eureka-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
    </dependencies>
</project>

修改application.yml,增加eureka配置:

server:
  port: 9002
spring:
  application:
    name: spring-cloud-config-server
  cloud:
    config:
      server:
        git:
          uri: https://github.com/chencytech/spring-cloud-examples.git # 配置git仓库的地址
          search-paths: config  # git仓库地址下的相对地址(如何直接使用仓库根目录的话,就不用配置此路径),可以配置多个,用,分割。
          # username:   # git仓库的账号
          # password:   # git仓库的密码

eureka:
  client: #客户端注册进eureka服务列表内
    service-url:
      #defaultZone: http://localhost:7001/eureka (单机)
      defaultZone: http://eureka7001:7001/eureka/,http://eureka7002:7002/eureka/,http://eureka7003:7003/eureka/ #(集群)
  instance:
    instance-id: spring-cloud-config-server9001 # 自定义服务名称信息
    prefer-ip-address: true # 访问路径可以现实IP

修改启动类,增加@EnableEurekaClient注解:

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

服务端改造好了,下面我们来改造客户端

client端改造

修改spring-cloud-config-clientpom文件,引入eureka依赖:

<?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>spring-cloud-config</artifactId>
        <groupId>com.chaytech</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spring-cloud-config-client</artifactId>
    <packaging>jar</packaging>

    <dependencies>

        <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>
            <scope>test</scope>
        </dependency>

        <!--spring cloud config client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>

        <!--eureka-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
    </dependencies>
</project>

修改bootstrap.yml

  1. 去掉直接指向配置中心服务端地址的配置
  2. 增加开启Config服务发现支持的配置
  3. 增加eureka客户端配置
spring:
  cloud:
    config:
      name: application # 对应{application}部分
      profile: dev # 对应{profile}部分
      label: master # 对应git的分支
      # uri: http://localhost:9002 # 配置中心服务端地址
      discovery:
        enabled: true # 开启Config服务发现支持
        serviceId: spring-cloud-config-server # 指定server端的name,也就是server端spring.application.name的值

eureka:
  client: #客户端注册进eureka服务列表内
    service-url:
      #defaultZone: http://localhost:7001/eureka (单机)
      defaultZone: http://eureka7001:7001/eureka/,http://eureka7002:7002/eureka/,http://eureka7003:7003/eureka/ #(集群)
  instance:
    instance-id: spring-cloud-config-client9002 # 自定义服务名称信息
    prefer-ip-address: true # 访问路径可以现实IP

修改启动类,增加@EnableEurekaClient注解:

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

客户端也改造好了,下面我们来测试一下。

分别启动eureka集群、config server端、config client端:
在这里插入图片描述

访问eureka管理页面:http://127.0.0.1:7001/
在这里插入图片描述
可以看到config server端、config client端都注册到了eureka注册中心了。

请求接口:http://127.0.0.1:9003/profiles
在这里插入图片描述
可以看到拿到了配置文件内容

接着请求:http://127.0.0.1:9002/application/dev
在这里插入图片描述
可以看到获取到了配置文件信息。

此处我只启动了一个config server端,可以自己下去再启动一个config server端,达到主备效果,就算其中一台出了问题,也不会影响配置中心的服务。

源码地址:https://github.com/chencytech/spring-cloud-examples

赞(0) 打赏
未经允许不得转载:IDEA激活码 » SpringCloud构建微服务之SpringCloudConfig配置中心高可用

一个分享Java & Python知识的社区