Spring Cloud构建微服务架构:分布式配置中心【Dalston版】

Spring Cloud Config是Spring Cloud团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分。其中服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置仓库并为客户端提供获取配置信息、加密/解密信息等访问接口;而客户端则是微服务架构中的各个微服务应用或基础设施,它们通过指定的配置中心来管理应用资源与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。Spring Cloud Config实现了对服务端和客户端中环境变量和属性配置的抽象映射,所以它除了适用于Spring构建的应用程序之外,也可以在任何其他语言运行的应用程序中使用。由于Spring Cloud Config实现的配置中心默认采用Git来存储配置信息,所以使用Spring Cloud Config构建的配置服务器,天然就支持对微服务应用配置信息的版本管理,并且可以通过Git客户端工具来方便的管理和访问配置内容。当然它也提供了对其他存储方式的支持,比如:SVN仓库、本地化文件系统。

在本文中,我们将学习如何构建一个基于Git存储的分布式配置中心,并对客户端进行改造,并让其能够从配置中心获取配置信息并绑定到代码中的整个过程。

准备配置仓库

  • 准备一个git仓库,可以在码云或Github上创建都可以。比如本文准备的仓库示例:http://git.oschina.net/didispace/config-repo-demo

  • 假设我们读取配置中心的应用名为config-client,那么我们可以在git仓库中该项目的默认配置文件config-client.yml

info:
profile: default
  • 为了演示加载不同环境的配置,我们可以在git仓库中再创建一个针对dev环境的配置文件config-client-dev.yml
info:
profile: dev

构建配置中心

通过Spring Cloud Config来构建一个分布式配置中心非常简单,只需要三步:

  • 创建一个基础的Spring Boot工程,命名为:config-server-git,并在pom.xml中引入下面的依赖(省略了parent和dependencyManagement部分):
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
</dependencies>
  • 创建Spring Boot的程序主类,并添加@EnableConfigServer注解,开启Spring Cloud Config的服务端功能。
@EnableConfigServer
@SpringBootApplication
public class Application {

public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}

}
  • application.yml中添加配置服务的基本信息以及Git仓库的相关信息,例如:
spring
application:
name: config-server
cloud:
config:
server:
git:
uri: http://git.oschina.net/didispace/config-repo-demo/
server:
port: 1201

到这里,使用一个通过Spring Cloud Config实现,并使用Git管理配置内容的分布式配置中心就已经完成了。我们可以将该应用先启动起来,确保没有错误产生,然后再尝试下面的内容。

如果我们的Git仓库需要权限访问,那么可以通过配置下面的两个属性来实现;
spring.cloud.config.server.git.username:访问Git仓库的用户名
spring.cloud.config.server.git.password:访问Git仓库的用户密码

完成了这些准备工作之后,我们就可以通过浏览器、POSTMAN或CURL等工具直接来访问到我们的配置内容了。访问配置信息的URL与配置文件的映射关系如下:

  • /{application}/{profile}[/{label}]
  • /{application}-{profile}.yml
  • /{label}/{application}-{profile}.yml
  • /{application}-{profile}.properties
  • /{label}/{application}-{profile}.properties

上面的url会映射{application}-{profile}.properties对应的配置文件,其中{label}对应Git上不同的分支,默认为master。我们可以尝试构造不同的url来访问不同的配置内容,比如,要访问master分支,config-client应用的dev环境,就可以访问这个url:http://localhost:1201/config-client/dev/master,并获得如下返回:

{
"name": "config-client",
"profiles": [
"dev"
],
"label": "master",
"version": null,
"state": null,
"propertySources": [
{
"name": "http://git.oschina.net/didispace/config-repo-demo/config-client-dev.yml",
"source": {
"info.profile": "dev"
}
},
{
"name": "http://git.oschina.net/didispace/config-repo-demo/config-client.yml",
"source": {
"info.profile": "default"
}
}
]
}

我们可以看到该Json中返回了应用名:config-client,环境名:dev,分支名:master,以及default环境和dev环境的配置内容。

构建客户端

在完成了上述验证之后,确定配置服务中心已经正常运作,下面我们尝试如何在微服务应用中获取上述的配置信息。

  • 创建一个Spring Boot应用,命名为config-client,并在pom.xml中引入下述依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
</dependencies>
  • 创建Spring Boot的应用主类,具体如下:
@SpringBootApplication
public class Application {

public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}

}
  • 创建bootstrap.yml配置,来指定获取配置文件的config-server-git位置,例如:
spring:
application:
name: config-client
cloud:
config:
uri: http://localhost:1201/
profile: default
label: master

server:
port: 2001

上述配置参数与Git中存储的配置文件中各个部分的对应关系如下:

  • spring.application.name:对应配置文件规则中的{application}部分
  • spring.cloud.config.profile:对应配置文件规则中的{profile}部分
  • spring.cloud.config.label:对应配置文件规则中的{label}部分
  • spring.cloud.config.uri:配置中心config-server的地址

这里需要格外注意:上面这些属性必须配置在bootstrap.properties中,这样config-server中的配置信息才能被正确加载。

在完成了上面你的代码编写之后,读者可以将config-server-git、config-client都启动起来,然后访问http://localhost:2001/info ,我们可以看到该端点将会返回从git仓库中获取的配置信息:

{
"profile": "default"
}

另外,我们也可以修改config-client的profile为dev来观察加载配置的变化。

更多Spring Cloud内容请持续关注我的博客更新或在《Spring Cloud微服务实战》中获取。

代码示例

样例工程将沿用之前在码云和GitHub上创建的SpringCloud-Learning项目,重新做了一下整理。通过不同目录来区分Brixton和Dalston的示例。

  • 码云:点击查看
  • GitHub:点击查看

具体工程说明如下:

  • 基于Git仓库的配置中心:config-server-git
  • 使用配置中心的客户端:config-client

相关阅读

  • Spring Cloud构建微服务架构:服务注册与发现(Eureka、Consul)
  • Spring Cloud构建微服务架构:服务消费者(基础)
  • Spring Cloud构建微服务架构:服务消费者(Ribbon)
  • Spring Cloud构建微服务架构:服务消费者(Feign)
  • Spring Cloud构建微服务架构:分布式配置中心
  • Spring Cloud构建微服务架构:服务容错保护(hystrix服务降级)
  • Spring Cloud构建微服务架构:服务容错保护(hystrix依赖隔离)
  • Spring Cloud构建微服务架构:服务容错保护(hystrix断路器)
  • Spring Cloud构建微服务架构:Hystrix监控面板
  • Spring Cloud构建微服务架构:Hystrix监控数据聚合
  • 更多Spring Cloud内容…

money.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图谱实战 | 知识图谱在美团搜索酒旅场景认知中的应用

分享嘉宾&#xff1a;陈骐 美团 高级算法专家编辑整理&#xff1a;毛佳豪 中国平安浙江分公司(实习)出品平台&#xff1a;DataFunTalk导读&#xff1a;知识图谱凭借能够以图模型描述知识和世界万物关联关系的特性&#xff0c;在各行业领域大放异彩。与此同时&#xff0c;知识图…

AI技术在空气净化机器人中的高能应用

本文转载自公众号“夕小瑶的卖萌屋”&#xff0c;专业带逛互联网算法圈的神操作 -----》我是传送门 关注后&#xff0c;回复以下口令&#xff1a; 回复【789】 &#xff1a;领取深度学习全栈手册&#xff08;含NLP、CV海量综述、必刷论文解读&#xff09; 回复【入群】&#xf…

Spring Cloud构建微服务架构:服务消费(Feign)【Dalston版】

通过前两篇《Spring Cloud构建微服务架构&#xff1a;服务消费&#xff08;基础&#xff09;》和《Spring Cloud构建微服务架构&#xff1a;服务消费&#xff08;Ribbon&#xff09;》&#xff0c;我们已经学会了在Spring Cloud中基本的服务调用方式。本文我们将继续介绍Spring…

LeetCode 1317. 将整数转换为两个无零整数的和

1. 题目 「无零整数」是十进制表示中 不含任何 0 的正整数。 给你一个整数 n&#xff0c;请你返回一个 由两个整数组成的列表 [A, B]&#xff0c;满足&#xff1a; A 和 B 都是无零整数A B n 题目数据保证至少有一个有效的解决方案。 如果存在多个有效解决方案&#xff…

预训练模型对实体的表示能力差?一个简单有效的解法来了(开源)

本文转载自公众号“夕小瑶的卖萌屋”&#xff0c;专业带逛互联网算法圈的神操作 -----》我是传送门 关注后&#xff0c;回复以下口令&#xff1a; 回复【789】 &#xff1a;领取深度学习全栈手册&#xff08;含NLP、CV海量综述、必刷论文解读&#xff09; 回复【入群】&#xf…

图谱实战 | 深度应用驱动的医学知识图谱构建

分享嘉宾&#xff1a;徐美兰 浙江数字医疗卫生技术研究院 数字医学知识中心主任编辑整理&#xff1a;李杰 京东出品平台&#xff1a;DataFunTalk导读&#xff1a;数研院这些年在知识图谱建设上取得了丰硕成果&#xff0c;今天我们将图谱构建过程中的经验、心得分享给大家&#…

朴素贝叶斯法(Naive Bayes,NB)

文章目录1. 朴素贝叶斯法的学习与分类1.1 基本方法2. 参数估计2.1 极大似然估计2.2 学习与分类算法2.2.1 例题2.2.2 例题代码2.3 贝叶斯估计&#xff08;平滑&#xff09;2.3.1 例题2.3.2 例题代码3. 自编程实现NB4. sklearn.naive_bayes1. 朴素贝叶斯法的学习与分类 1.1 基本…

《Easy RL:强化学习教程》出版了!文末送书

作为人工智能里最受关注的领域之一&#xff0c;强化学习的热度一直居高不下&#xff0c;但它的学习难度也同样不低。在学习强化学习的过程中&#xff0c;遇到了有无数资料却难以入门的问题&#xff0c;于是发起了Datawhale强化学习项目&#xff0c;希望自学的同时帮助更多学习者…

Spring Cloud构建微服务架构:服务消费(基础)【Dalston版】

通过上一篇《Spring Cloud构建微服务架构&#xff1a;服务注册与发现》&#xff0c;我们已经成功地将服务提供者&#xff1a;eureka-client或consul-client注册到了Eureka服务注册中心或Consul服务端上了&#xff0c;同时我们也通过DiscoveryClient接口的getServices获取了当前…

论文浅尝 | Temporal Knowledge Graph Completion Using Box Embeddings

笔记整理&#xff1a;杨露露&#xff0c;天津大学硕士论文链接&#xff1a;https://www.aaai.org/AAAI22Papers/AAAI-6210.MessnerJ.pdf动机时态知识图谱补全&#xff08;TKGC&#xff09;中的主要挑战是额外学习时间戳嵌入&#xff0c;以便嵌入模型根据关系、实体和时间戳嵌入…

别再无脑wwm了,在下游任务中不一定有效

本文转载自公众号“夕小瑶的卖萌屋”&#xff0c;专业带逛互联网算法圈的神操作 -----》我是传送门 关注后&#xff0c;回复以下口令&#xff1a; 回复【789】 &#xff1a;领取深度学习全栈手册&#xff08;含NLP、CV海量综述、必刷论文解读&#xff09; 回复【入群】&#xf…

逻辑斯谛回归模型( Logistic Regression,LR) 最大熵模型(Max Entropy,ME)

文章目录1. Logistic Regression 模型1.1 logistic 分布1.2 二项逻辑斯谛回归模型1.3 模型参数估计1.4 多项逻辑斯谛回归1.5 Python代码2. Maximum Entropy 模型2.1 最大熵原理2.2 最大熵模型的定义2.3 最大熵模型的学习2.4 例题3. 模型学习的最优化算法4. 鸢尾花LR分类实践1. …

Spring Cloud构建微服务架构:服务注册与发现(Eureka、Consul)【Dalston版】

已经有非常长的时间没有更新《Spring Cloud构建微服务架构》系列文章了&#xff0c;自从开始写Spring Cloud的专题内容开始就获得了不少的阅读量和认可&#xff0c;当然也有一些批评&#xff0c;其中也不乏一些很中肯的意见和深度的问题&#xff0c;对我来说也是进一步提高的契…

虚拟专辑丨知识图谱

虚 拟 专 辑 “武大学术期刊”的“虚拟专辑” 旨在将已发表在武汉大学科技期刊中心旗下期刊的论文以时下热点领域按主题重新组合&#xff0c;集中推送&#xff0c;以方便不同专业领域的读者集中查阅、追踪最新研究成果。此次推送的“知识图谱”虚拟专辑&#xff0c;为近几年发…

prompt你到底行不行?

文 | 马杀鸡三明治 源 | 知乎 很久之前老板下任务要试试prompt这个大风&#xff0c;但是玩完后发现太菜了所以连文章都没写&#xff0c;刚好今天工作比较闲就来写写了。 先上结论&#xff0c;连续prompt为运用大模型提供了一种思路&#xff0c;其实这种思路早就见过不少了。。。…

LeetCode 1323. 6 和 9 组成的最大数字

1. 题目 给你一个仅由数字 6 和 9 组成的正整数 num。 你最多只能翻转一位数字&#xff0c;将 6 变成 9&#xff0c;或者把 9 变成 6 。 请返回你可以得到的最大数字。 示例 1&#xff1a; 输入&#xff1a;num 9669 输出&#xff1a;9969 解释&#xff1a; 改变第一位数字…

Spring Cloud实战小贴士:Zuul统一异常处理(二)

在前几天发布的《Spring Cloud实战小贴士&#xff1a;Zuul统一异常处理&#xff08;一&#xff09;》一文中&#xff0c;我们详细说明了当Zuul的过滤器中抛出异常时会发生客户端没有返回任何内容的问题以及针对这个问题的两种解决方案&#xff1a;一种是通过在各个阶段的过滤器…

论文浅尝 | Explainable Link Prediction in Knowledge Hypergraphs

笔记整理&#xff1a;陈子睿&#xff0c;天津大学硕士论文链接&#xff1a;https://dl.acm.org/doi/10.1145/3511808.3557316动机知识超图链接预测已被认为是各种知识使能下游应用的关键问题。然而&#xff0c;大多数现有方法主要以黑盒方式执行链接预测&#xff0c;它们学习实…

吴恩达入驻知乎,涨粉秒过万!知乎首答:如何系统学习机器学习

文 | 卖萌酱大家好&#xff0c;我是卖萌酱。昨天在知乎timeline上刷到一个问题&#xff1a;虽然卖萌酱已经不需要系统学习机器学习了&#xff0c;但无意间发现最高赞的id竟然叫“吴恩达”&#xff1f;&#xff1f;好家伙&#xff0c;看了看回答日期&#xff0c;是4月8号。戳进去…

学术会议|第六届知识图谱论坛CNCC-知识图谱赋能大数据大算力

CNCC2022将于12月8日至10日在贵州省贵阳市国际生态会议中心举办&#xff0c;今年CNCC技术论坛数量达到122个&#xff0c;内容涵盖了“计算行业、人工智能、云计算、教育、安全”等30个方向。本文特别介绍将于12月9日举行的【第六届知识图谱论坛-知识图谱赋能大数据大算力】。报…