如何使用Spring Cloud Config进行分布式配置,知道一个算你牛

本文详细介绍了如何使用SpringCloudConfig进行分布式配置管理,以解决微服务架构中配置管理的挑战。SpringCloudConfig提供了服务器端和客户端支持,允许在中央位置集中管理所有环境的应用程序配置。配置数据可以存储在Git、SVN或其他后端,客户端能够自动从服务器获取并解密配置。文中还展示了如何设置和使用HTTPAPI端点,并通过一个实际例子演示了配置文件的迁移过程。
摘要由CSDN通过智能技术生成

使用Spring Cloud Config进行分布式配置

现在是在我们的架构中引入新元素的最佳时机,这个新元素就是分布式配置服务器(Distributed Configuration Server)。与服务发现类似,这是围绕微服务的关键概念之一。在本书第4章中,已经详细讨论了如何在服务器端和客户端上准备发现。但是到目前为止,我们始终是使用放置在胖JAR文件中的属性为应用程序提供配置。这种方法有一个很大的缺点,那就是它需要重新编译和重新部署微服务的实例。Spring Boot支持另一种方法,它假定使用存储在胖JAR之外的文件系统中的显式配置。使用spring .config. location属性可以在启动期间为应用程序轻松配置它。这种方法不需要重新部署,但它也不是没有缺点。在使用大量微服务的情况下,基于放置在文件系统中的显式文件的配置管理可能真的很麻烦。另外,如果每个微服务都有很多实例,而每个实例又都有一个特定的配置。那么,采用这种方法的麻烦程度简直不敢想象。

如何使用Spring Cloud Config进行分布式配置,知道一个算你牛

 

无论如何,分布式配置是云原生环境中非常流行的标准。Spring Cloud Config可以为分布式系统中的外部化配置提供服务器端和客户端支持。通过该解决方案,开发人员可以在一个中心位置管理所有环境中的应用程序的外部属性。这个概念非常简单,而且易于实现。服务器只是公开HTTP和基于资源的API 接口,它们将以JSON、 YAML或properties格式返回property 文件。此外,它还会对返回的属性值执行解密和加密操作。客户端需要从服务器获取配置设置,并且如果在服务器端启用了加密之类的功能,则客户端还需要对它们进行解密处理。

如何使用Spring Cloud Config进行分布式配置,知道一个算你牛

 

配置数据可以存储在不同的存储库(Repository) 中。EnvironmentRepository 的默认实现将使用Git后端(Backend)。也可以设置其他版本控制系统(Version Control System,VCS),如SVN。如果开发人员不想利用VCs系统提供的功能作为后端,则可以使用文件系统或Vault。 Vault 是一种用于管理机密的工具,它可以用于存储和控制对令牌、密码、证书和API密钥等资源的访问。

本章将要讨论的主题包括:

口由 Spring Cloud Config Server公开的HTTP API。

口服务器端的不同类型的存储库后端。

口与服务发现集成。

口使用SpringCloudBus和消息代理自动重新加载配置。

HTTPAPI资源简介

Config Server将提供HTTP API,它可以通过各种方式调用。以下端点都是可用的。

口application}/profle}[/{lbel}]: 以JSON格式返回数据; label 参数是可选的。

口/application}- {profile}.yml:返回YAML格式。

口/{abel}/application)- {profile}.yml: 这是前一个端点的变体,开发人员可以传递一个可选的label参数。

口/{application}-{profile}. properties: 返回properties 文件使用的简单键/值格式。

口 /{abel}/application)- {profile} .properties: 这是前一个端点的变体,开发人员可以传递一个可选的label参数。

从客户端的角度来看,aplication 参数是应用程序的名称,它取自spring. aplication.name或springconfig.name的属性,profile 是活动配置文件或以逗号分隔的活动配置文件列表。最后一个可用的参数label是一个可选属性,只有在使用Git作为后端存储时才很重要。它将设置Git分支的名称以进行配置,默认为master.

如何使用Spring Cloud Config进行分布式配置,知道一个算你牛

 

现在可以从最简单的基于文件系统后端的例子开始。默认情况下,Spring Cloud Config Server将尝试从Git存储库获取配置数据。要启用原生配置文件,开发人员应该将spring profiles active选项设置为native来启动服务器。它将搜索存储在以下位置的文件:classpath:/. casspath:/config. fle:/. fle:/config. 这意味着properties 或YAML文件也可以放在JAR文件中。为测试起见,我们已经在src/main/resourcee中创建了一个 config文件夹。我们的配置文件将存储在该位置中。现在需要回到本书第4章的示例中。在第4章中已经介绍了集群发现环境的配置,该环境中的每个客户端服务实例都在不同的区域中启动。它有3个可用区域和3个客户端实例,每个实例都在application.yml文件中有自己的配置文件。该示例的源代码在config分支中可用,以下是其链接。

https://gi thub。com/piomin/ 
sample-spring-cloud-netflix/tree/config

我们当前的任务是将该配置迁移到Spring Cloud Config Server.这里不妨自我提醒一下这个示例的属性。以下是用于客户端应用程序的第一个实例的配置文件设置。根据所选的配置文件,有一个修改实例运行的端口、默认发现服务器URL和区域名称。

---

spring:

profiles: zonel

eureka:

instance :

metadataMap :

zone: zonel

client :

serviceUrl:

defaultZone: http://localhost:8761/eureka/

server:

port:

$(PORT:80811}

在前面所介绍的示例中,为简单起见,已经将所有配置文件设置放在单个aplication.yml文件中。该文件也可以分为3个不同的文件,其名称包括配置文件application 
zonel.yml.pplicao-zone2.ymo和pplication zone3.yml.当然,这样的名称对于单个应用程序来说是唯一的,因此,如果决定将文件移动到远程配置服务器中,则应该注意它们的名称。客户端应用程序名称是从spring.aplication.name 注入的,在这种情况下,它是client-service。因此,总而言之,笔者已经在src/main/resources/config目录中创建了名为client-service-zone[n].yml的3个配置文件,其中,[m]是实例的编号。现在,当开发人员调用http:oh/o:/88/clie/ service/zone端点时,将接收到以下JISON格式的响应。

{

"name":"client-service",

"profiles":[" zone1"],

"label" :null ,

"version" :null,

"state"" :nul1,

"propertySources":[{

"name" :"classpath:/config/client- service-zonel . yml",

"source":{

"eureka . instance . metadataMap . zone" :"zone1",

"eureka. client. serviceUrl . defaultZone" :"http://localhost: 8761/eureka/",

"server . port":"$ {PORT:8081}"

}

}]

}

还可以为第二个实例调用
ht:t/t/los5/888/client-servicee -zone2.properties,它将以下响应作为属性列表返回。

eureka . client. serviceUrl . defaultZone: http: //localhost: 8762/eureka/

eureka. instance。me tada taMap. zone: zone2

server .port: 8082

HTTP API端点的最后一个可用版本
htt:ol/os/8889/client/servce-zone3.yml将返回与输入文件相同的数据。以下是第三个实例的结果。

eureka :

client:

serviceUrl:

defaultZone: http: //localhost: 8763/eureka/

ins tance :

me tada taMap :

zone: zone3

server :

port: 8083

总结

因为文章包含的内容实在是太多了,就不给大家做过多的介绍了,需要这份文档来学习的小伙伴,可以转发此文关注小编。

扫码来获取就可以了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值