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

* Config加入Eureka服务治理
<https://blog.csdn.net/weixin_43430036/article/details/83900884#ConfigEureka_1>
* 注册config-server
<https://blog.csdn.net/weixin_43430036/article/details/83900884#configserver_5>
* pom.xml
<https://blog.csdn.net/weixin_43430036/article/details/83900884#pomxml_6>
* application.yml
<https://blog.csdn.net/weixin_43430036/article/details/83900884#applicationyml_59>
* ConfigServerApplication.java
<https://blog.csdn.net/weixin_43430036/article/details/83900884#ConfigServerApplicationjava_85>
* 启动测试 <https://blog.csdn.net/weixin_43430036/article/details/83900884#_101>
* config-client发现
<https://blog.csdn.net/weixin_43430036/article/details/83900884#configclient_106>
* pom.xml
<https://blog.csdn.net/weixin_43430036/article/details/83900884#pomxml_108>
* bootstrap.yml
<https://blog.csdn.net/weixin_43430036/article/details/83900884#bootstrapyml_159>
* ConfigClientApplication.java
<https://blog.csdn.net/weixin_43430036/article/details/83900884#ConfigClientApplicationjava_179>
* 启动测试 <https://blog.csdn.net/weixin_43430036/article/details/83900884#_195>
* 高可用与负载均衡
<https://blog.csdn.net/weixin_43430036/article/details/83900884#_205>
* application-bakcup.yml
<https://blog.csdn.net/weixin_43430036/article/details/83900884#applicationbakcupyml_209>
* 启动测试 <https://blog.csdn.net/weixin_43430036/article/details/83900884#_235>


<>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源代码 <https://github.com/Jaysong2012/scexample>