在Spring Cloud Config Server中组织大量应用程序配置

时间:2015-03-26 22:24:58

标签: spring-cloud

现在,Spring Cloud Config是GA,我们正在考虑将其用作Spring Boot应用程序的外部配置源。由于所涉及的技术对我们的组织来说是如此新颖,因此我对如何在生产中使用Cloud Config,特别是在部署和灾难情景方面提出了很多疑问。

我想我已经开始了解服务器如何加载和分发配置,这让我想知道组织和部署配置的最佳方式是什么。我的第一个想法是,每个应用程序都有自己的Git repo以及常见的配置存储库。

这里的问题是我误读了文档。我的印象是我能做到这样的事情:

git:
   uri: ssh://git@stash:7999/scc/common-config.git
   repos:
      app-config:
         uri: ssh://git@stash:7999/scc/
         pattern: app*-config.git    

认为app-config部分会获取与该模式匹配的所有Git存储库。在我们部署新应用程序时,我们重新启动服务器以获取新存储库中的配置。我没有得到的是该模式是指指定存储库中的文件,而不是git文件本身。所以我真正要做的就是这样:

git:
   uri: ssh://git@stash:7999/scc/common-config.git
   repos:
      app-foo-config:
         uri: ssh://git@stash:7999/scc/app-foo-config.git
         pattern: app-foo*    

我对这种方法的问题在于,每次部署另一个应用程序时,我都需要一个进程来更新Cloud Config Servers' bootstrap.yml文件,除了重新启动它们之外,还要添加另一个应用程序的repo,如下所示:

git:
   uri: ssh://git@stash:7999/scc/common-config.git
   repos:
      app-foo-config:
         uri: ssh://git@stash:7999/scc/app-foo-config.git
         pattern: app-foo*    
      app-bar-config:
         uri: ssh://git@stash:7999/scc/app-bar-config.git
         pattern: app-bar*    

这不是很理想。对我来说,看起来我必须通过域将我的配置分成几个存储库,这给了我类似的东西:

git:
   uri: ssh://git@stash:7999/scc/common-config.git
   repos:
      domain-foo-config:
         uri: ssh://git@stash:7999/scc/domain-foo-config.git
         pattern: domain-foo*    
      domain-bar-config:
         uri: ssh://git@stash:7999/scc/domain-bar-config.git
         pattern: domain-bar*    
      domain-baz-config:
         uri: ssh://git@stash:7999/scc/domain-baz-config.git
         pattern: domain-baz*    

只要我能保持域逻辑,这应该使我的配置不会失控。那么,我的问题是什么?有两个:

  1. 我的最后一种方法是否合理?还是有更好的方式让我失踪?

  2. 文档暗示配置可以在文件夹中,这有助于保持配置的有序性。有人有运气吗?

  3. 此外,由于你已经深入到我的文本墙,我认为模式被多个repo配置的错误。

    如果没有模式,服务器不会从repo中的任何文件提供任何配置。最重要的是,虽然模式:“*”有效,但它只适用于第一个回购。之后,无论使用何种模式,Cloud Config Server都无法从任何其他仓库中的任何文件加载任何配置。这包括默认仓库。

1 个答案:

答案 0 :(得分:2)

  

没有模式,服务器不会提供任何配置   回购中的任何文件。最重要的是,模式:“*”工作,   它只适用于第一个回购。之后,Cloud Config Server   无法从任何其他仓库中的任何文件加载任何配置   无论给出什么样的模式。这包括默认仓库。

如果您不需要该模式,您只需使用

即可
git:
   uri: ssh://git@stash:7999/scc/common-config.git

如果您需要使用带模式的repo,请确保您的应用程序在bootstrap.yml中的spring.application.name具有相同的模式。例如,

spring:
   application:
      name: domain-foo-app-a