七、springcloud之配置中心Config(二)之高可用集群

方案一:传统作法(不推荐)

  服务端负载均衡

    将所有的Config Server都指向同一个Git仓库,这样所有的配置内容就通过统一的共享文件系统来维护,而客户端在指定Config Server位置时,只要配置Config Server外的均衡负载即可。

    注:服务器端负载均衡和客户端负载均衡的区别

  存在的问题:

    客户端都是直接调用配置中心的server端来获取配置文件信息。这样就存在了一个问题,客户端和服务端的耦合性太高,如果server端要做集群,客户端只能通过原始的方式来路由,server端改变IP地址的时候,客户端也需要修改配置,不符合springcloud服务治理的理念。

方案二:把config-server注册为服务(推荐)

  将server端当做一个服务注册到eureka中,client端去eureka中去获取配置中心server端的服务既可。

一、config-server配置

  1.添加依赖

  加入了spring-cloud-starter-eureka,用来注册服务

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

  2.配置文件

  在配置文件中添加eureka.client.serviceUrl.defaultZone以指定服务注册中心的位置

server:
  port: 8001
spring:
  application:
    name: spring-cloud-config-server
  cloud:
    config:
      server:
        git:
          uri: # 配置git仓库的地址
          search-paths: # git仓库地址下的相对地址,可以配置多个,用,分割。
          username: # git仓库的账号
          password: # git仓库的密码
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8000/eureka/   ## 注册中心eurka地址

  高可用:复制一份配置,把端口为8003

  3.启动类

  启动类添加@EnableDiscoveryClient激活对配置中心的支持,用来将config-server注册到上面配置的服务注册中心上去。

@EnableDiscoveryClient
@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}

  测试是否成功,参考上一篇:六、springcloud之配置中心Config

二、config-client配置

  1.添加依赖

    添加spring-cloud-starter-eureka依赖,用来注册服务:

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <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.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

  2.配置文件

  application.yml如下:

spring:
  application:
    name: spring-cloud-config-client
server:
  port: 8002

  bootstrap.properties如下:

spring:
    cloud:
         config:
         name: "config-test"
             lab: master
             profile: dev
         discovery:
           enabled: true
           service-id: spring-cloud-config-server
         eureka:
          client:
              serviceUrl:
           defaultZone: http://localhost/8000/eureka/

  主要是去掉了spring.cloud.config.uri直接指向server端地址的配置,增加了最后的三个配置:

  • spring.cloud.config.discovery.enabled :开启Config服务发现支持
  • spring.cloud.config.discovery.serviceId :指定server端的name,也就是server端spring.application.name的值
  • eureka.client.serviceUrl.defaultZone :指向配置中心的地址

  这三个配置文件都需要放到bootstrap.yml的配置中

  3.启动类

    启动类添加@EnableDiscoveryClient激活对配置中心的支持

@EnableDiscoveryClient
@SpringBootApplication
public class ConfigClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigClientApplication.class, args);
    }
}

    启动client端,在浏览器中访问:http://localhost:8000/ 就会看到server端和client端都已经注册了到注册中心了。

    停掉一个server,还可以访问,说明高可用集群搭建成功

 

参考:http://blog.didispace.com/springcloud4-2/

   http://www.ityouknow.com/springcloud/2017/05/25/springcloud-config-eureka.html

posted @ 2018-06-27 16:09  灬小乙  阅读(488)  评论(0编辑  收藏  举报