【问题标题】:What is the best way to store constant field in microservice architecture?在微服务架构中存储常量字段的最佳方式是什么?
【发布时间】:2019-08-05 09:18:48
【问题描述】:

许多服务器使用相同的常量,有必要组织一个集中更改它们。在微服务架构中存储常量参数的最佳方式是什么。

例如,我们存储 static final int MAX_PEOPLE_COUNT = 100;该字段使用不同的微服务。如果我们改变这个值,所有的微服务都应该看到它。

如果还有参数值的版本控制,那就太好了。

【问题讨论】:

  • 你说的是什么类型的参数?数据库服务器?通用环境变量..?
  • 如果它们是恒定的,则无需特别将它们存储在任何地方,如果您想更改它们并且应用程序应该做出反应,那么它就会变得有趣。您具体指的是哪些参数?
  • hmm 可能是一个基于共享的实用服务,它存储所有参数,然后每个微服务可以定期读取它们?

标签: java spring-boot microservices spring-cloud


【解决方案1】:

存储跨微服务配置的解决方案有很多。从所有公共数据库开始。我们专门使用consul by HashiCorp 来存储我们的跨微服务配置。

【讨论】:

    【解决方案2】:

    如果您在 Spring 生态系统中,最好的方法是使用 Spring Cloud Config Server。您也可以轻松轻松地获得在 Spring Cloud Config Server guide 和 here 中设置配置服务器的步骤。文档非常简单。

    您甚至可以将 Zookeeper 用作 Spring Cloud 的集中配置服务。更多详情请参阅article。

    【讨论】:

    • 如果使用 Spring Cloud Config,我不喜欢语法 @Value("${MAX_PEOPLE_COUNT}")。也许 Spring Cloud 中还有另一种语法?
    • @FranzF 根据文档,您可以访问配置The client may access any value in the Config Server using the traditional mechanisms (e.g. @ConfigurationProperties, @Value("${…​}") or through the Environment abstraction)
    • @FranzF 你能否详细说明不喜欢@Value 语法?
    • @Madhu Bhat 因为我们有遗留项目并且常量的数量超过 200。一个合适的方法是使用像 map 这样的键/值存储。
    • @FranzF 即使您有超过 200 个配置,使用 @Value 也不会有问题。您可以拥有@Value("${…​}") 中的键,并且相同的值将分配给java 类中的字段。并且使用 spring cloud 不可能拥有像商店这样的地图
    【解决方案3】:

    扩展@Madhu Bhat 的论点,我认为最好的方法是使用 Spring Cloud Config Server (getting started)

    现在特定于您的用例,几个微服务共享一些共同的可配置值(我有意将这个词从 CONSTANT 更改为 CONFIGURABLE,因为根据定义,常量不是应该的更改),最佳实践在spring中使用配置文件如下:

    假设您的生态系统中有 3 个微服务(假设场景)

    • 计费服务
    • 购物车服务
    • 产品-服务

    作为最佳实践,您应该在各个级别维护配置文件 -

    • 微服务 + 特定环境配置文件,例如billing-dev.properties 或 billing-test.properties 此属性文件将包含特定于特定服务的特定环境的属性。计费服务的某些属性可能与您的 dev 环境和 test 环境不同。您可以拥有与环境一样多的属性/配置文件。

    • 微服务级别 – 特定微服务的所有环境通用的属性,例如billing.properties

    • application.properties – 此属性文件包含所有微服务或多个微服务(您的用例)共有的属性,例如计费和产品服务都需要一些可配置的属性。

    属性/配置解析:

    从微服务的角度来看(比如计费服务),任何属性都将首先根据您在服务启动时指定的环境在第一个提到的属性文件(billing-test.properties 或 billing-dev.properties)中搜索按属性配置(see here in detail)

    spring.profiles.active
    

    如果在环境特定属性中找不到所需的属性,则要搜索的后备配置文件将是所有环境的第二个文件通用服务配置文件 (billing.properties)。

    如果在上面提到的两个文件中没有找到属性,它将由 application.yml 文件解决

    【讨论】:

      猜你喜欢
      • 2022-01-12
      • 1970-01-01
      • 2019-03-30
      • 2018-10-25
      • 2020-01-15
      • 1970-01-01
      • 2017-07-01
      • 2019-10-25
      • 1970-01-01
      相关资源
      最近更新 更多