这里是修真院后端小课堂,每篇分享文从
八个方面深度解析后端知识/技能,本篇分享的是:
【如何使用分布式配置中心】
大家好,我是IT修真院武汉分院学员,一枚正直纯洁善良的JAVA程序员。
今天给大家分享一下,修真院官网JAVA任务十——如何使用分布式配置中心
1.背景介绍
SpringCloud简介
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
2.知识剖析
2.1 SpringCloud由什么主键组成
(1)服务于注册中心(Eureka)
(2)ribbon
(3)Feign
(4)断路器(Hystrix)
(5)路由网关(zuul)
(6)分布式配置中心(Spring Cloud Config)
(7)消息总线(Spring Cloud bus)等等
2.2 spring cloud config 分布式配置中心
2.2.1什么是spring cloud config
在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client。
Spring Cloud Config为服务端和客户端提供了分布式系统的外部化配置支持。配置服务器为各应用的所有环境提供了一个中心化的外部配置。它实现了对服务端和客户端对Spring Environment和PropertySource抽象的映射,所以它除了适用于Spring构建的应用程序,也可以在任何其他语言运行的应用程序中使用。作为一个应用可以通过部署管道来进行测试或者投入生产,我们可以分别为这些环境创建配置,并且在需要迁移环境的时候获取对应环境的配置来运行。
2.2.2spring cloud config的使用好处
1.置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容。当然他也提供本地化文件系统的存储方式。
2.使用 spring Cloud 进行集中式配置管理,将以往的配置文件从项目中摘除后放到Git 或svn中集中管理,并在需要变更的时候,可以通知到各应用程序,应用程序刷新配置不需要重启。
2.2.3 基本原理
git 上存放我们的远程配置文件
config-server 连接到 git
config-client 连接到config-server
当我们启动config-client 服务的时候,client 会通过连接的 config-server 拿到远程git 上面的配置文件,然后通过 Spring 加载到对象中。
3.常见问题
yml的配置文件怎么写,都具有什么意思
4.解决方案
spring.cloud.config.server.git.uri:配置git仓库地址
spring.cloud.config.server.git.searchPaths:配置仓库路径
spring.cloud.config.label:配置仓库的分支
spring.cloud.config.server.git.username:访问git仓库的用户名
spring.cloud.config.server.git.password:访问git仓库的用户密码
5.编码实战
spring.application.name=config-client
spring.cloud.config.label=master
spring.cloud.config.profile=dev
#spring.cloud.config.uri= http://localhost:8888/
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=config-server
server.port=8881
ConfigClientApplication {
(String[] args) {
SpringApplication.(ConfigClientApplication.args)}
()
String (= )
String (){
}
}
spring.application.name=config-server
server.port=8886
spring.cloud.config.server.git.uri=https://github.com/CZM2217/SpringcloudConfig
spring.cloud.config.server.git.searchPaths=respo
spring.cloud.config.label=master
spring.cloud.config.server.git.username=
spring.cloud.config.server.git.password=
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
6.扩展思考
1、问:springcloud 可以结合zookeeper吗?
答:springcloud可以使用zookeeper作为注册中心,也可以用consul作为注册中心,并非一定要用eureka。只不过使用eureka的话,能共使用Netflix的oss组件,搭建起来更加方便。
2、http请求地址和资源文件映射有什么内容
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
3、需要什么依赖
org.springframework.cloud
spring-cloud-starter-config
技能树.IT修真院
“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。
7.参考资料
spring cloud
8.更多讨论
q:使用分布式的有点是什么
A: 我们的整个系统目前是所有业务都在一个项目里面,而且不同客户对不同业务模块的需求和取舍都不同,每个业务模块也不能独立出来复用,这样就导致一个项目改来改去N多个版本,管理起来非常麻烦。
Q:有些业务模块是非常重要且常用的,有些是不常用的,但在整个系统中一旦其中一个不常用模块出现问题可能会导致整个系统不可用
A:由于各个服务独立,所以会互不影响,这也是开发分布式的原因
Q:团队中有人对业务A熟悉,有人对业务B熟悉,也有人对业务C熟悉。在这种情况下业务A、B、C都在一个系统中且有关联时往往会耦合性比较大,造成的沟通也比较复杂,如何处理
A:
对于业务模块之间需要通信的,可以采用消息队列来实现,比如RabbitMQ。或者互相调用API来达到目的,具体方案要根据业务情况来确定。不同服务只需要约定好通信方式即可。
如果采用微服务架构就要做到根据业务模块来组织团队,也就是一个业务模块一个团队或一个人来负责每个负责指定业务模块的团队或个人用做“产品”的心态去做好需求设计以及开发。这样会大大减少沟通以及可能存在的设计问题。当然,这种分工形式对某个团队或个人要求比较高。
除此之外微服务还有很多特点,如:
相比单体项目,可以做到不同业务采取不同的技术方案以及技术平台,这样就不会出现杀鸡用牛刀或是杀牛用指甲钳的窘境了
快来与我一起学习吧~http://www.jnshu.com/home