走进Spring Cloud之九 高可用配置中心(Greenwich版本)
走进Spring Cloud之九 高可用配置中心(Greenwich版本)
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
- 走进Spring Cloud之十 高可用配置中心动态刷新(Greenwich版本)
- 走进Spring Cloud之十一 SpringCloud bus 消息总线刷新配置(Greenwich版本)
- SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)(Finchley版本)
- 第七篇: 高可用的分布式配置中心(Spring Cloud Config)
- 史上最简单的SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)
- springcloud(八):配置中心服务化和高可用
- SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)(Finchley版本)
- Spring Cloud(九)高可用的分布式配置中心 Spring Cloud Config 集成 Eureka 服务
- 第七篇: 高可用的分布式配置中心(Spring Cloud Config)
- SpringCloud之高可用的分布式配置中心(Spring Cloud Config)(七)
- 第七篇: 高可用的分布式配置中心(Spring Cloud Config)
- 第七篇: 高可用的分布式配置中心(Spring Cloud Config)
- 第七章:高可用的分布式配置中心(Spring Cloud Config)
- springcloud_7(配置中心的高可用)
- SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)
- 第七篇: 高可用的分布式配置中心(Spring Cloud Config)
- 史上最简单的SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)
- springcloud学习笔记(十一) 高可用的分布式配置中心(Spring Cloud Config)
- 第七篇: 高可用的分布式配置中心(Spring Cloud Config)
- springcloud(八):配置中心服务化和高可用