Spring Cloud Config分布式集群配置中心
关于Spring Cloud Config
配置服务器主要功能:
- 提供访问配置的服务接口
- 对属性进行加密和解密
- 可以简单地嵌入Spring Boot应用中
配置客户端主要功能:
- 绑定配置服务器,使用远程属性来初始化Spring容器
- 对属性进行加密和解密
- 属性改变时,可以对他们进行重新加载
- 提供与配置相关的几个管理端点
- 在初始化引导程序的上下文时,进行绑定配置服务器和属性解密等工作
应用结构
使用Git,SVN等版本管理系统用于存放配置文件,服务器会到版本管理系统中获取配置,集群中的各个客户端在到服务器中获取配置
Spring Cloud Config默认使用Git管理配置内容,这里使用Svn,默认情况下很多端点需要认证才能访问,配置 management.security.enabled=false 关闭认证,
Spring Cloud Config server 提供4种配置
- git:默认值,表示去Git仓库读取配置文件
- subversion:表示去svn仓库读取配置文件
- native: 表示去本地文件系统中读取配置文件
- vault:表示去vault中读取配置文件,vault是一款资源控制工具,可对资源实现安全访问
Spring Cloud Config与 Eureka,Zuul,Spring Cloud Bus整合使用
Eureka-server 没啥讲的,看看Eureka-config-server配置服务器
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.tmatesoft.svnkit</groupId>
<artifactId>svnkit</artifactId>
<version>1.9.0</version>
</dependency>
application.yml
server:
port: 8899
spring:
application:
name: eureka-config-server
profiles:
active: subversion
cloud:
config:
server:
svn:
uri: https://localhost/svn/test-project
username: admin
password: 123456
default-label: eureka
eureka:
instance:
hostname: localhost
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
Eureka-config-client(消息接收者)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</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-actuator</artifactId>
<version>1.5.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
新建一份eureka-config-client-dev.yml配置添加test.user.name属性和值,上传至Svn的 https://localhost/svn/test-project/eureka目录下,调用客户端的/refersh进行配置刷新
整合zuul实现动态路由,Eureka-zuul实际也是一个配置客户端
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>1.5.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
为了实现动态路由项目的路由配置都放到svn中,新建一份eureka-zuul-client-rel.yml配置添加以下配置,上传至Svn的 https://localhost/svn/test-project/eureka目录下,调用客户端的/refersh进行配置刷新
当访问http://localhost:9000/routeTest时,会自动路由到 sohu.com, 可以依次启动eureka服务器,配置服务器,路由访问http://localhost:9000/routeTest可以看到最终跳转,修改svn上的配置文件跳转到taobao,修改完后上传svn后,访问http://localhost:9000/refresh端点发送post请求刷新配置,再次访问http://localhost:9000/routeTest跳转taobao网,整个过程不需要对任何节点进行重启操作,只需要访问 /refresh端点即可完成.
实现全部配置刷新和单个节点刷新
外部程序调用 eureka-bus的/bus/refresh 端点后,eureka-bus发送消息到RabbitMQ,RabbitMQ将消息广播给各个消费者,消费者收到消息后重新加载程序配置实现全部配置刷新,注意:消费者均需加入amqp的依赖,eureka-bus为MQ服务其它为客户端
刷新单个节点配置: 可以为”总线”项目的/bus/refresh端点添加destination请求参数,刷新指定项目配置,
例如:刷新网关配置 /bus/refresh?destination=eureka-zuul:9000 格式为”服务ID:端口” 全部实例可以使用eureka-zuul:**
还没有评论,来说两句吧...