使用 microconfig.io 轻松管理微服务配置

微服务开发和后续运营的主要问题之一是其实例的胜任和准确配置。 在我看来,一个新的框架可以帮助解决这个问题 微配置.io。 它允许您非常优雅地解决一些常规应用程序配置任务。

如果您有许多微服务,并且每个微服务都有自己的配置文件,那么其中一个微服务很可能会出错,如果没有适当的技能和日志系统,则很难捕获该错误。 框架为自己设置的主要任务是尽量减少重复的实例配置参数,从而减少添加错误的可能性。

让我们看一个例子。 假设我们有一个带有配置文件的简单应用程序 雅姆。 这可以是任何语言的任何微服务。 让我们看看如何将该框架应用于此服务。

但首先,为了更方便,我们在 Idea IDE 中创建一个空项目,然后在其中安装 microconfig.io 插件:

使用 microconfig.io 轻松管理微服务配置

我们设置了插件启动配置,您可以使用默认配置,如上面的屏幕截图所示。

我们的服务叫做订单,那么在一个新的项目中我们会创建一个类似的结构:

使用 microconfig.io 轻松管理微服务配置

将配置文件放在服务名称为的文件夹中 - 应用程序.yaml。 所有微服务都是在某种环境中启动的,因此,除了为服务本身创建配置之外,还需要描述环境本身:为此我们将创建一个文件夹 环境 并向其中添加一个文件,其中包含我们工作环境的名称。 因此,框架将为环境中的服务创建配置文件 开发,因为这个参数是在插件设置中设置的。

文件结构 开发.yaml 这将非常简单:

mainorder:
    components:
         - order

该框架适用于分组在一起的配置。 对于我们的服务,请为群组选择一个名称 主订单。 该框架在环境文件中找到每组这样的应用程序,并为所有这些应用程序创建配置,并在相应的文件夹中找到这些配置。

在服务设置文件本身中 秩序 现在我们只指定一个参数:

spring.application.name: order

现在让我们运行该插件,它将根据属性中指定的路径生成我们的服务所需的配置:

使用 microconfig.io 轻松管理微服务配置

人们可以 相处 并且无需安装插件,只需下载框架发行版并从命令行运行它即可。
该解决方案适合在构建服务器上使用。

值得注意的是,该框架完全理解 财产 语法,即可以一起使用的普通属性文件 雅姆 配置。

让我们添加另一个服务 付款 并使现有的复杂化。
В 秩序:

eureka:
 instance.preferIpAddress: true
 client:
   serviceUrl:
     defaultZone: http://192.89.89.111:6782/eureka/
server.port: 9999
spring.application.name: order
db.url: 192.168.0.100

В 付款:

eureka:
 instance.preferIpAddress: true
 client:
   serviceUrl:
     defaultZone: http://192.89.89.111:6782/eureka/
server.port: 9998
spring.application.name: payments
db.url: 192.168.0.100

这些配置的主要问题是服务设置中存在大量复制粘贴。 让我们看看该框架将如何帮助摆脱它。 让我们从最明显的开始 - 配置的存在 尤里卡 在每个微服务的描述中。 让我们使用设置文件创建一个新目录并向其中添加新配置:

使用 microconfig.io 轻松管理微服务配置

现在让我们将这一行添加到每个项目中 #包括尤里卡.

框架会自动找到eureka配置并将其复制到服务配置文件中,而不会创建单独的eureka配置,因为我们不会在环境文件中指定它 开发.yaml. 服务 秩序:

#include eureka
server.port: 9999
spring.application.name: order
db.url: 192.168.0.100

我们还可以通过将导入行更改为将数据库设置移动到单独的配置中 #包括尤里卡、甲骨文.

值得注意的是,框架在重新生成配置文件时会跟踪每个更改,并将其放置在主配置文件旁边的特殊文件中。 其日志中的条目如下所示:“Stored 1 属性更改为 订单/diff-application.yaml” 这使您可以快速检测大型配置文件的更改。

删除配置的通用部分可以让你摆脱很多不必要的复制粘贴,但不允许你灵活地为不同的环境创建配置——我们服务的端点是唯一的并且是硬编码的,这很糟糕。 让我们尝试删除它。

一个好的解决方案是将所有端点保留在其他人可以引用的一个配置中。 为此,框架中引入了对占位符的支持。 这就是配置文件将如何更改 尤里卡:

 client:
   serviceUrl:
     defaultZone: http://${endpoints@eurekaip}:6782/eureka/

现在让我们看看这个占位符是如何工作的。 系统找到一个名为 端点 并寻找其中的意义 尤里凯普,然后将其替换到我们的配置中。 但是不同的环境呢? 为此,请在以下位置创建一个设置文件 端点 以下类型 应用程序.dev.yaml。 框架独立地根据文件扩展名决定该配置属于哪个环境并加载它:

使用 microconfig.io 轻松管理微服务配置

开发文件内容:

eurekaip: 192.89.89.111
dbip: 192.168.0.100

我们可以为我们的服务端口创建相同的配置:

server.port: ${ports@order}.

所有重要的设置都集中在一处,从而减少了由于配置文件中分散的参数而出现错误的可能性。

框架提供了很多现成的占位符,例如,您可以获取配置文件所在目录的名称并对其进行赋值:

#include eureka, oracle
server.port: ${ports@order}
spring.application.name: ${this@name}

因此,无需在配置中额外指定应用程序名称,也可以将其放置在公共模块中,例如在同一个 eureka 中:

client:
   serviceUrl:
     defaultZone: http://${endpoints@eurekaip}:6782/eureka/
 spring.application.name: ${this@name}

配置文件 秩序 将减少为一行:

#include eureka, oracle
server.port: ${ports@order}

如果我们不需要父配置中的任何设置,我们可以在配置中指定它,它将在生成过程中应用。 也就是说,如果由于某种原因我们需要订单服务的唯一名称,我们只需保留该参数即可 spring.application.name.

假设您需要向服务添加自定义日志记录设置,这些设置存储在单独的文件中,例如, 日志文件。 让我们为其创建一组单独的设置:

使用 microconfig.io 轻松管理微服务配置

在基本配置中,我们将使用占位符告诉框架在哪里放置我们需要的日志记录设置文件 @配置目录:

microconfig.template.logback.fromFile: ${logback@configDir}/logback.xml

在文件中 日志文件 我们配置标准附加程序,它又可以包含框架将在生成配置期间更改的占位符,例如:

<file>logs/${this@name}.log</file>

通过添加导入到服务配置 登录,我们自动获取每个服务的配置日志记录:

#include eureka, oracle, logback
server.port: ${ports@order}

现在是时候更详细地了解框架的所有可用占位符了:

${这个@env} - 返回当前环境的名称。
${…@name} — 返回组件的名称。
${…@configDir} — 返回组件配置目录的完整路径。
${…@resultDir} — 返回组件目标目录的完整路径(生成的文件将放置在该目录中)。
${this@configRoot} — 返回配置存储根目录的完整路径。

系统还允许您获取环境变量,例如java的路径:
${env@JAVA_HOME}
要么,因为框架是用 JAVA,我们可以得到类似调用的系统变量 系统::获取属性 使用这样的结构:
${[电子邮件保护]}
值得一提的是对扩展语言的支持 弹簧EL。 配置中适用以下表达式:

connection.timeoutInMs: #{5 * 60 * 1000}
datasource.maximum-pool-size: #{${[email protected]} + 10} 

您可以使用表达式在配置文件中使用局部变量 #var:

#var feedRoot: ${[email protected]}/feed
folder:
 root: ${this@feedRoot}
 success: ${this@feedRoot}/archive
 error: ${this@feedRoot}/error

因此,该框架是一个相当强大的微服务微调和灵活配置工具。 该框架完美地完成了其主要任务 - 消除设置中的复制粘贴,整合设置,从而最大限度地减少可能的错误,同时允许您轻松组合配置并针对不同环境进行更改。

如果您对这个框架感兴趣,我建议您访问其官方页面并熟悉完整的框架 文档,或深入研究来源 这里.

来源: habr.com

添加评论