zoukankan      html  css  js  c++  java
  • 架构模式: 外部配置化

    架构模式: 外部配置化

    上下文

    应用程序通常使用一个或多个基础结构和第三方服务。基础结构服务的示例包括:服务注册表,消息代理和数据库服务器。第三方服务的示例包括:支付处理,电子邮件和消息传递等。

    问题

    如何使服务无需修改即可在多个环境中运行?

    要点

    • 必须为服务提供配置数据,以告知它如何连接到外部/第三方服务。例如,数据库网络位置和凭据
    • 服务必须在多个环境中运行 - 开发,测试,qa,登台,生产 - 无需修改和/或重新编译
    • 不同的环境具有外部/第三方服务的不同实例,例如,QA数据库与生产数据库,测试信用卡处理帐户与生产信用卡处理帐户

    解决方案

    外部化所有应用程序配置,包括数据库凭据和网络位置。
    在启动时,服务从外部源读取配置,例如, OS环境变量等

    例子

    Spring Boot外部化配置从各种源读取值,包括操作系统环境变量,属性文件和命令行参数。这些值在Spring应用程序上下文中可用。

    来自Microservices示例应用程序的RegistrationServiceProxy是一个用Scala编写的组件示例,它使用变量user_registration_url进行配置:

    
    @Component
    class RegistrationServiceProxy @Autowired()(restTemplate: RestTemplate) extends RegistrationService {
    
      @Value("${user_registration_url}")
      var userRegistrationUrl: String = _
    

    docker-compose.yml文件将其值作为操作系统环境变量提供:

    web:
      image: sb_web
      ports:
        - "8080:8080"
      links:
        - eureka
      environment:
        USER_REGISTRATION_URL: http://REGISTRATION-SERVICE/user
    

    REGISTRATION-SERVICE是服务的逻辑名称。它使用客户端发现解决。

    结果上下文

    这种模式具有以下好处:

    • 应用程序在多个环境中运行,无需修改和/或重新编译

    此模式存在以下问题:

    • 如何确保在部署应用程序时,提供的配置与预期的匹配?

    相关模式

    • 服务发现模式,服务器端服务发现和客户端服务发现,解决了服务如何知道其他应用服务的网络位置的相关问题
  • 相关阅读:
    windows窗口消息内部处理机制
    iPhone and iPad Development GUI Kits, Stencils and Icons
    【转】windbg 调试经典文章(常用)
    atl和mfc
    开发IDA pro图形界面插件
    ida常用插件
    为Visual studio 2008 添加汇编工程模板
    常用软件汇总
    BOOL EnumInternetExplorer( ProcessWebBrowser pHander )
    同年龄的牛人博客
  • 原文地址:https://www.cnblogs.com/paxlyf/p/11289245.html
Copyright © 2011-2022 走看看