Spring Cloud Config 和Spring Cloud Bus实现配置中心
2019独角兽企业重金招聘Python工程师标准>>>
Spring Cloud是很多组件的集合,Spring将常用的技术框架进行包装和整合,如mybatis zookeeper rabbitmq redis等等,还有一些科技公司贡献出来的一些经过生产环境验证的组件如奈飞公司贡献出的eureke(服务发现) Hystrix(监控与隔离) Feign(声明式服务调用) Ribbon(负载均衡) Zuul(网关) 等等,详情移步官网 SpringCloud
Spring Cloud是目前比较流行的微服务开发框架,可以与容器技术如docker一起使用,提高生产力。但是组件过多也有一定的学习曲线,而且适合大公司的架构不见得适合我们的业务,要根据实际情况灵活运用。
Spring Cloud Config是基于git/svn仓库来管理配置,然后有一个ConfigServer来负责拉取配置,ConfigClient是使用配置的应用,比如现在有很多微服务应用,如订单管理,用户管理,地址管理,库存管理等等,在这些微服务的pom中增加ConfigClient就可以自动从ConfigServer拉取配置。我们还希望配置更新之后可以实时获取,这时候需要用到spring cloud中的bus组件,bus其实就是基于amqp的一个消息总线,spring对rabbitmq和kafka支持的比较好。常见的场景是:
1、更改配置
2、push到远程仓库
3、push动作触发一个web hook
4、这个web hook会使用post访问ConfigServer的一个接口
5、ConfigServer通过rabbitmq发送一个广播
6、client收到消息,自动拉取并刷新配置
这些不需要任何编码工作,只需要配置就可以。下面是一个简单的例子。
1、rabbitmq安装参照官网,十分简单,也可以参考俺的博客
2、启动一个Config Server
pom.xml
<?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"><modelVersion>4.0.0</modelVersion><groupId>spring_cloud</groupId><artifactId>config_demo</artifactId><version>1.0-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.5.RELEASE</version></parent><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config</artifactId><version>2.0.1.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-bus</artifactId><version>2.0.0.RELEASE</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-stream-rabbit</artifactId><version>2.0.1.RELEASE</version></dependency></dependencies><repositories><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/libs-snapshot</url><snapshots><enabled>true</enabled></snapshots></repository></repositories>
</project>
入口类:
@EnableConfigServer@SpringBootApplicationpublic class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}
配置:application.properties
server.port=8888
#配置仓库地址
spring.cloud.config.server.git.uri=https://github.com/mychemicalromance/spring_cloud_config
## 配置文件夹
spring.cloud.config.server.git.searchPaths=configs
## 分支
spring.cloud.config.label=master
## 以下是bus相关配置 替换成自己的就行,比如host port name password
spring.cloud.bus.trace.enabled=true
spring.rabbitmq.host=192.168.137.5
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=rabbit
management.endpoints.web.exposure.include=*
解释:Spring Cloud只需要上述入口类就启动了一个web工程,使用的是嵌入的tomcat/jetty。默认读取application.[properties|yml|json] 使用喜欢的格式就行。
3、Config Client
pom.xml
<?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"><modelVersion>4.0.0</modelVersion><groupId>spring_cloud</groupId><artifactId>config_client</artifactId><version>1.0-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.5.RELEASE</version></parent><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config</artifactId><version>2.0.1.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-bus</artifactId><version>2.0.0.RELEASE</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-stream-rabbit</artifactId><version>2.0.1.RELEASE</version></dependency></dependencies><repositories><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/libs-snapshot</url><snapshots><enabled>true</enabled></snapshots></repository></repositories>
</project>
入口类:
@Configuration
@EnableAutoConfiguration
@RestController
@RefreshScope
public class Application {@Value("${a}")String name;@RequestMapping("/")public String home() {return "Hello " + name;}public static void main(String[] args) {SpringApplication.run(Application.class, args);}}
配置:application.properties
server.port=8002
## bus相关配置,替换成自己的就行,比如host port name password
spring.cloud.bus.trace.enabled=true
spring.rabbitmq.host=192.168.137.5
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=rabbit
## 读取app1的配置
spring.application.name=app1
## profile是dev,可以有测试test,沙箱mirror,线上online等等
spring.cloud.config.profile=dev
management.endpoints.web.exposure.include=*
3、启动Config Server和Config Client,首先访问localhost:8888/app1/dev,可以看到所有配置,然后访问localhost:8002/可以看到获取了配置。然后本地更改配置文件并push。由于在github上配置web hook来调用本地是不现实的,所以我们用curl来模拟post访问Config Server,如果是在公司的git上,并且在公司局域网内可以访问Config Server,可以配置web hook来测试。
curl -X POST "http://localhost:8888/actuator/bus-refresh"
然后刷新Config Client,就能看到最新的配置了。
转载于:https://my.oschina.net/wuxiaofei/blog/2088395
Spring Cloud Config 和Spring Cloud Bus实现配置中心相关推荐
- Spring Cloud构建微服务架构:分布式配置中心【Dalston版】
Spring Cloud Config是Spring Cloud团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分.其中服务端也称为 ...
- 将Spring Security OAuth2授权服务JWK与Consul 配置中心结合使用
将Spring Security OAuth2授权服务JWK与Consul 配置中心结合使用 概述 在前文中介绍了OAuth2授权服务简单的实现密钥轮换,与其不同,本文将通过Consul实现我们的目的 ...
- spring cloud config动态刷新_Spring Cloud学习笔记--配置中心(Config)
Spring Cloud Config provides server-side and client-side support for externalized configuration in a ...
- Spring Cloud构建微服务架构:分布式配置中心(加密解密)
最近正好想发一篇关于配置中心加密的细节内容,结果发现基础的加密解密居然漏了,所以在这个入门系列中补充一下.后面再更新一下,使用配置中心的一些经验和教训. 在微服务架构中,我们通常都会采用DevOps的 ...
- 【深入了解Spring Cloud Alibaba Nacos:服务注册和配置中心】—— 每天一点小知识
- 【SpringCloud】四、Spring Cloud Config
Spring Cloud Config 前言 一.什么是配置中心 1. 为什么需要分布式配置中心 2.常用分布式配置中心框架 二.什么是Spring Cloud Config? 1.Springclo ...
- Spring Cloud(九)高可用的分布式配置中心 Spring Cloud Config 集成 Eureka 服务
上一篇文章,讲了SpringCloudConfig 集成Git仓库,这一篇我们讲一下SpringCloudConfig 配和 Eureka 注册中心一起使用 在分布式系统中,由于服务数量巨多,为了方便 ...
- 为Spring Cloud Config插上管理的翅膀
最近一致在更新Spring Cloud Config的相关内容,主要也是为这篇埋个伏笔,相信不少调研过Spring Cloud Config的用户都会吐槽它的管理能力太弱.因此,就有了下面为讲推荐的这 ...
- springcloud 之 配置中心服务 spring cloud config
开门见山,不做过多的陈述,简单说一下配置中心的作用:在我们的实际项目开发中,我们一般都是一个项目一套配置,就像我之前的springboot项目,每个项目下都有一套resources/applicati ...
最新文章
- Linux内核学习四库全书
- 好文 | “智能经济”时代,协作机器人的应用前景与趋势探讨
- firefox.exe not found problem (VS2005 website)
- docker化你的java应用(下)
- ABAP屏幕上显示LIST的三种方法
- 洛谷P5173 传球(暴力)
- MyBatisPlus_查询分页篇_入门试炼_02
- hadoop namenode管理元数据机制
- linux 显示套接字统计信息,Linux 命令 - ss: 查看套接字统计信息
- linux 日志报告生成器,Linux报告生成器工具awk
- linux如何重启syslog服务,Linux syslog服务
- 查询数据库里所有表名和字段名的语句
- 怎么判断第几范式例题_学完就忘、做题就懵!初级会计怎么备考才能更高效?...
- SharpPcap学习笔记
- html5圆盘抽奖,HTML5 Canvas圆盘抽奖运用DEMO
- 苹果退款_这里有颗“后悔药”:苹果App Store退款流程
- sublime 前端css 插件
- Matlab在一张图上画多条曲线或分别画
- 【基于stm32 FreeRtos的智能台灯控制】
- Praat脚本-005 | 标注文件批量增加层级