您的位置:首页 > 编程语言 > Java开发

走进Spring Cloud之九 高可用配置中心(Greenwich版本)

2018-11-10 12:20 549 查看

走进Spring Cloud之九 高可用配置中心(Greenwich版本)

  • config-client发现
  • 高可用与负载均衡
  • Config加入Eureka服务治理

    前面我们演示的案例是我们有一个Config Server 和一个 Config Client ,我们的Config Client直接从Config Server读取配置,这里九存在一个比较严重的耦合问题,假如我们的单一的Config Server挂掉了的IP或者端口变化了,我们Config Client将无法读取配置。这里我们也可以将Config Server作为一个普通的微服务应用,纳入Eureka的服务治理体系中。这样我们的微服务应用就可以通过配置中心的服务名来获取配置信息,这种方式比起传统的实现模式来说更加有利于维护,因为对于服务端的负载均衡配置和客户端的配置中心指定都通过服务治理机制一并解决了,既实现了高可用,也实现了自维护。

    注册config-server

    pom.xml

    添加spring-cloud-starter-netflix-eureka-client依赖

    <?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>scexample</artifactId>
    <groupId>com.pubutech</groupId>
    <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    
    <artifactId>config-server</artifactId>
    <packaging>jar</packaging>
    
    <dependencies>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </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>
    </dependencies>
    </dependencyManagement>
    
    <build>
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    </plugins>
    </build>
    
    </project>

    application.yml

    修改application.yml增加eureka注册中心信息

    server:
    port: 8888
    
    spring:
    application:
    name: config-server
    cloud:
    config:
    server:
    git:
    uri: https://github.com/Jaysong2012/scexample     # 配置git仓库的地址
    search-paths: springcloud-config-repo                             # git仓库地址下的相对地址,可以配置多个,用,分割。
    username:                                             # git仓库的账号(私有库必填)
    password:                                             # git仓库的密码(私有库必填)
    label: master                                        #配置仓库的分支
    
    eureka:
    client:
    service-url:
    #设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。
    defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/,http://localhost:8763/eureka/

    ConfigServerApplication.java

    修改ConfigServerApplication激活注册

    @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
    @EnableConfigServer
    //激活注册发现
    @EnableDiscoveryClient
    public class ConfigServerApplication {
    
    public static void main(String[] args) {
    SpringApplication.run(ConfigServerApplication.class, args);
    }
    
    }

    启动测试

    访问http://localhost:8761/

    config-client发现

    pom.xml

    修改pom.xml增加spring-cloud-starter-netflix-eureka-client依赖

    <?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>scexample</artifactId>
    <groupId>com.pubutech</groupId>
    <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    
    <artifactId>config-client</artifactId>
    <packaging>jar</packaging>
    
    <dependencies>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </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>
    </dependencies>
    </dependencyManagement>
    
    <build>
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    </plugins>
    </build>
    
    </project>

    bootstrap.yml

    修改bootstrap.yml去掉spring.cloud.config.uri远程server的地址,并且添加注册中心的配置。

    spring:
    cloud:
    config:
    name: springcloud-config             #对应{application}部分
    profile: pro                         #对应{profile}部分
    #uri: http://localhost:8888/          #配置中心的具体地址
    label: master                        #对应git的分支。如果配置中心使用的是本地存储,则该参数无用
    discovery:
    service-id: config-server      #指定配置中心的service-id,便于扩展为高可用配置集群。
    enabled: true                        #开启Config服务发现支持
    
    eureka:
    client:
    service-url:
    #设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。
    defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/,http://localhost:8763/eureka/

    ConfigClientApplication.java

    修改ConfigClientApplication.java激活注册发现

    @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
    //激活注册发现
    @EnableDiscoveryClient
    public class ConfigClientApplication {
    
    public static void main(String[] args) {
    SpringApplication.run(ConfigClientApplication.class, args);
    }
    
    }

    启动测试

    访问http://localhost:8761/

    此时访问http://localhost:8889/writer

    访问成功,读取远程配置。

    高可用与负载均衡

    同zuul的负载均衡一样,单个config-server容易出现故障,我们可以创建启动多个config-server来避免这个问题。

    application-bakcup.yml

    案例演示,我们可以在config-server的resources的目录下新建application-bakcup.yml

    server:
    port: 8887
    
    spring:
    application:
    name: config-server
    cloud:
    config:
    server:
    git:
    uri: https://github.com/Jaysong2012/scexample     # 配置git仓库的地址
    search-paths: springcloud-config-repo                             # git仓库地址下的相对地址,可以配置多个,用,分割。
    username:                                             # git仓库的账号(私有库必填)
    password:                                             # git仓库的密码(私有库必填)
    label: master                                        #配置仓库的分支
    
    eureka:
    client:
    service-url:
    #设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。
    defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/,http://localhost:8763/eureka/

    启动测试

    java -jar config-server-0.0.1-SNAPSHOT.jar
    java -jar config-server-0.0.1-SNAPSHOT.jar  --spring.profiles.active=backup

    访问http://localhost:8761/

    此时 我们关闭8888 config-server
    访问http://localhost:8761/

    此时访问http://localhost:8889/writer

    GitHub源代码

    阅读更多
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: 
    相关文章推荐