频道栏目
首页 > 程序开发 > 软件开发 > 其他 > 正文
Spring Cloud Config分布式配置中心高可用及配置刷新
2018-09-21 15:18:56           
收藏   我要投稿

一、前言

当服务实例数量比较多的情况下,每个服务单元都从配置中心获取配置信息,假如配置中心由于网络等原因挂掉了,这时候会导致那些服务实例请求失败等一系列问题。这时候可以考虑将配置中心做成一个微服务,注册到Eureka中,这样启动多个Config Server就可以实现负载均衡,从而实现配置中心的高可用。

二、准备工程

a. springcloud_eureka_server: 服务注册中心,端口1111

b. springcloud_hign_availability_config_server: 高可用配置中心,端口2222

c. springcloud_config_client: 具体服务单元,端口3333

本文对怎么搭建Eureka服务注册中心不做过多讲解,可以参考前面文章。

三、新建springcloud_hign_availability_config_server工程

因为要将配置中心作为一个服务注册到eureka中,所以注意引入config-server以及eureka的依赖,具体pom.xml:

<

	4.0.0

	com.springcloud.wsh
	springcloud__hign_availability_config_server
	0.0.1-SNAPSHOT
	jar

	springcloud__hign_availability_config_server
	高可用Config配置中心

	
		org.springframework.boot
		spring-boot-starter-parent
		1.5.2.RELEASE
		 
	

	
		UTF-8
		UTF-8
		1.8
		Camden.SR6
	

	
		
			org.springframework.cloud
			spring-cloud-config-server
		

		
			org.springframework.boot
			spring-boot-starter-test
			test
		

		
			org.springframework.cloud
			spring-cloud-starter-eureka
		
	

	
		
			
				org.springframework.cloud
				spring-cloud-dependencies
				${spring-cloud.version}
				pom
				import
			
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	




<四、启动类加上@EnableConfigServer以及@EnableDiscoverClient注解

<

<<@EnableDiscoveryClient :让config-server配置中心成为eureka的服务端,通过负载均衡实现高可用

<<@EnableConfigServer: 开启分布式配置功能

<<五、config-server的配置文件application.yml

<<配置文件需要配置git仓库地址,访问路径,分支,访问用户名,密码等,注意需要配置

<<
<#配置注册到eureka服务注册中心的地址
eureka:
  client:
    serviceUrl:
      defaultZone: https://localhost:1111/eureka/

<<<以上配置将配置中心注册到Eureka上,别的服务就可以通过serviceId指定配置中心的地址,从而实现配置中心高可用。具体配置文件如下图:

<<<
<#配置注册到eureka服务注册中心的地址
eureka:
  client:
    serviceUrl:
      defaultZone: https://localhost:1111/eureka/
#端口号
server:
  port: 2222
#  port: 4444
#应用名称
spring:
  application:
    name: hign-availability-config-server
  cloud:
    config:
      server:
        git:
          #git远程仓库地址
          uri: 对应你的git仓库地址
          #访问git仓库的用户名(公开仓库不需要配置用户名和密码,私有仓库才需要配置)
          username: 对应你的git用户名
          #访问git仓库的密码
          password: 对应你的git密码
          #git仓库配置文件的路径
          search-paths: repository
      #git仓库分支(默认master)
      label: master

<<<<注意:这里还需要将上篇文章解决中文乱码的问题加到config-server中,防止出现中文乱码问题,具体可以参考上篇文章。

<<<<\

<<<<六、新建config-client工程

<<<<注意加入spring-cloud-starter-config、 spring-cloud-starter-eureka依赖,具体pom.xml:

<<<<
<

	4.0.0

	com.springcloud.wsh
	springcloud_config_client
	0.0.1-SNAPSHOT
	jar

	springcloud_config_client
	Demo project for Spring Boot

	
		org.springframework.boot
		spring-boot-starter-parent
		1.5.2.RELEASE
		 
	

	
		UTF-8
		UTF-8
		1.8
		Camden.SR6
	

	
		
			org.springframework.boot
			spring-boot-starter-web
		
		
			org.springframework.cloud
			spring-cloud-starter-config
		
		
			org.springframework.cloud
			spring-cloud-starter-eureka
		
	

	
		
			
				org.springframework.cloud
				spring-cloud-dependencies
				${spring-cloud.version}
				pom
				import
			
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	




<<<<<这时候,启动类需要加上@EnableDiscoverClient注册为Eureka的服务客户端。

<<<<<
<@SpringBootApplication
@EnableDiscoveryClient
public class SpringcloudConfigClientApplication {

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

<<<<<<七、config-client配置文件bootstrap.yml

<<<<<<注意名称是bootstrap.yml。

<<<<<<

<<<<<<

<<<<<<

<<<<<<<八、新建GetPropertyFromConfigServerController

<<<<<<<主要用于测试从git仓库读取配置文件内容

<<<<<<<

<<<<<<<<注意:需要加上@RefreshScope注解,主要是用于后面配置刷新用到。

<<<<<<<

<<<<<<<<九、测试

<<<<<<<<分别启动eureka-server、config-server,config-client项目,浏览器访问https://localhost:1111/,如图

<<<<<<<<\

<<<<<<<<可以看到,config-server以及config-client都成功注册到eureka。

<<<<<<<<这时我们访问https://localhost:3333/getPropertyFromConfigServer

<<<<<<<<\

<<<<<<<<\

<<<<<<<<可以看到,我们成功从git仓库中获取到配置文件中的内容。我们可以将config-server启动多个实例,然后访问https://localhost:3333/getPropertyFromConfigServer,可以看到成功获取配置信息,然后我们可以停掉其中一个config-server实例,我们继续访问https://localhost:3333/getPropertyFromConfigServer,还是可以成功获取git远程仓库的配置信息,这就实现了config-server的高可用。

<<<<<<<<下面我们聊聊配置刷新的问题,在实际项目中,假如我们修改了git仓库中的配置文件的信息,这时候是不会立即生效的,下面我们先讲下手动刷新的方法,实际项目中是通过Spring Cloud Bus消息总线的方式自动刷新远程仓库配置文件,这个后续讲解。

<<<<<<<<十、改造config-client

<<<<<<<<首先我们做一个测试,我们尝试使用Git工具修改当前配置的内容,比如,将

<<<<<<<<<\

<<<<<<<<<\

<<<<<<<<<这时候我们访问https://localhost:3333/getPropertyFromConfigServer,

<<<<<<<<<\

<<<<<<<<<可以看到返回的配置内容还是旧的,并没有同步更新。

<<<<<<<<<下面我们开始改造config-client,在config-client的pom.xml中加入监控的依赖:spring-boot-starter-actuator

<<<<<<<<<
<

    org.springframework.boot
    spring-boot-starter-actuator

<<<<<<<<<

<<<<<<<<<<

<<<<<<<<<<<\

<<<<<<<<<<

<<<<<<<<<< \

<<<<<<<<<<

<<<<<<<<<<<\

<<<<<<<<<<<这里我们使用postman发送post请求,如下图:

<<<<<<<<<<<\

<<<<<<<<<<<我们发现,postman拦截了我们的post请求,这是因为springboot的安全拦截,由于我们需要测试是否刷新成功,我们可以在config-client的配置文件application.yml中加入

<<<<<<<<<<<
<#忽略权限拦截
management:
  security:
    enabled: false

<<<<<<<<<<<<重启config-client,这时候我们修改一下git仓库中配置文件的值为:

<<<<<<<<<<<<

<<<<<<<<<<<<<接下来我们通过postman发送https://localhost:3333/refreshpost请求,

<<<<<<<<<<<<<\

<<<<<<<<<<<<<由上图说明配置文件的内容已经更新。

<<<<<<<<<<<<

<<<<<<<<<<<<<\

<<<<<<<<<<<<<至此,我们通过actuator实现了手动刷新git远程仓库中的配置文件的内容。注意一下在config-client项目中的controller上需要加上@RefreshScope注解, 否则调用/refresh接口看不到更新的内容,笔者就是踩了这个坑,需要注意下。

<<<<<<<<<<<<<十一、总结

<<<<<<<<<<<<<本文主要讲解了如何实现了高可用的Config Server配置中心以及利用Actuator暴露的refresh接口来实现配置的动态更新。通过前面几篇文章的学习,我们主要学了Eureka服务注册中心、Zuul网关路由、Ribbon负载均衡、Feign声明式服务调用、Config服务配置中心,这时候我们可以抽象一个比较简单的微服务架构图:

<<<<<<<<<<<<<\

点击复制链接 与好友分享!回本站首页
上一篇:深入浅出Java中JVM内存管理
下一篇:git忽略而不提交文件的3种情形
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站