Xestiona facilmente as configuracións dos microservizos con microconfig.io

Un dos principais problemas no desenvolvemento e posterior funcionamento dos microservizos é a configuración competente e precisa das súas instancias. Na miña opinión, un novo marco pode axudar con isto microconfig.io. Permítelle resolver algunhas tarefas rutineiras de configuración de aplicacións con bastante elegancia.

Se tes moitos microservizos, e cada un deles inclúe o seu propio ficheiro/ficheros de configuración, hai unha alta probabilidade de cometer un erro nun deles, que pode ser moi difícil de detectar sen a habilidade adecuada e un sistema de rexistro. A principal tarefa que se establece o marco é minimizar os parámetros de configuración de instancias duplicadas, reducindo así a probabilidade de engadir un erro.

Vexamos un exemplo. Digamos que temos unha aplicación sinxela cun ficheiro de configuración xaml. Este pode ser calquera microservizo en calquera idioma. Vexamos como se pode aplicar o marco a este servizo.

Pero primeiro, para maior comodidade, imos crear un proxecto baleiro en Idea IDE, despois de instalar o complemento microconfig.io nel:

Xestiona facilmente as configuracións dos microservizos con microconfig.io

Configuramos a configuración de lanzamento do complemento, podes usar a configuración predeterminada, como na captura de pantalla anterior.

O noso servizo chámase orde, entón nun novo proxecto crearemos unha estrutura similar:

Xestiona facilmente as configuracións dos microservizos con microconfig.io

Coloque o ficheiro de configuración no cartafol co nome do servizo - aplicación.yaml. Todos os microservizos lánzanse nalgún tipo de ambiente, polo que, ademais de crear unha configuración para o propio servizo, é necesario describir o propio ambiente: para iso crearemos un cartafol. envs e engadirlle un ficheiro co nome do noso contorno de traballo. Así, o marco creará ficheiros de configuración para os servizos do contorno dev, xa que este parámetro está definido na configuración do complemento.

Estrutura do ficheiro dev.yaml será ben sinxelo:

mainorder:
    components:
         - order

O marco funciona con configuracións que se agrupan. Para o noso servizo, escolle un nome para o grupo orde principal. O framework atopa cada un destes grupos de aplicacións no ficheiro do contorno e crea configuracións para todas elas, que atopa nos cartafoles correspondentes.

No propio ficheiro de configuración do servizo orde Especifiquemos só un parámetro polo momento:

spring.application.name: order

Agora imos executar o complemento e xerará a configuración necesaria para o noso servizo segundo o camiño especificado nas propiedades:

Xestiona facilmente as configuracións dos microservizos con microconfig.io

lata levarse ben e sen instalar un complemento, basta con descargar a distribución do cadro e executala desde a liña de comandos.
Esta solución é adecuada para usar nun servidor de compilación.

Paga a pena notar que o marco entende perfectamente propiedade sintaxe, é dicir, ficheiros de propiedade comúns que se poden usar xuntos en xaml configuracións.

Engadimos outro servizo pago e complicar o existente.
В orde:

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

В pago:

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

O principal problema destas configuracións é a presenza dunha gran cantidade de copia-pega na configuración do servizo. Vexamos como o marco axudará a desfacerse del. Comecemos polo máis obvio: a presenza da configuración eureka na descrición de cada microservizo. Imos crear un novo directorio co ficheiro de configuración e engadirlle unha nova configuración:

Xestiona facilmente as configuracións dos microservizos con microconfig.io

E agora imos engadir a liña a cada un dos nosos proxectos #incluír eureka.

O cadro atopará automaticamente a configuración de eureka e copiaraa nos ficheiros de configuración do servizo, mentres que non se creará unha configuración de eureka separada, xa que non a especificaremos no ficheiro do entorno. dev.yaml. Servizo orde:

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

Tamén podemos mover a configuración da base de datos a unha configuración separada cambiando a liña de importación a #include eureka, oráculo.

Paga a pena notar que o cadro rastrexa cada cambio ao rexenerar ficheiros de configuración e colócao nun ficheiro especial xunto ao ficheiro de configuración principal. A entrada do seu rexistro ten o seguinte aspecto: "Almacenado 1 propiedade cambia a order/diff-application.yaml" Isto permítelle detectar rapidamente cambios en ficheiros de configuración grandes.

A eliminación de partes comúns da configuración permíteche desfacerte de moitos copias e pegas innecesarias, pero non che permite crear de forma flexible unha configuración para diferentes ambientes: os puntos finais dos nosos servizos son únicos e codificados, isto é malo. Imos tentar eliminar isto.

Unha boa solución sería manter todos os puntos finais nunha configuración á que outros poidan facer referencia. Para este fin, introduciuse no marco soporte para marcadores de posición. Así cambiará o ficheiro de configuración eureka:

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

Agora vexamos como funciona este marcador de posición. O sistema atopa un compoñente chamado endpoints e busca nela sentido eurekaip, e despois substitúeo na nosa configuración. Pero que hai de diferentes ambientes? Para iso, cree un ficheiro de configuración en endpoints o seguinte tipo aplicación.dev.yaml. O framework de forma independente, en función da extensión do ficheiro, decide a que ambiente pertence esta configuración e cárgaa:

Xestiona facilmente as configuracións dos microservizos con microconfig.io

Contido do ficheiro de desenvolvemento:

eurekaip: 192.89.89.111
dbip: 192.168.0.100

Podemos crear a mesma configuración para os portos dos nosos servizos:

server.port: ${ports@order}.

Todas as opcións importantes están nun só lugar, reducindo así a probabilidade de erros debido a parámetros dispersos nos ficheiros de configuración.

O marco ofrece moitos marcadores de posición preparados, por exemplo, pode obter o nome do directorio no que se atopa o ficheiro de configuración e asignalo:

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

Grazas a isto, non hai que especificar adicionalmente o nome da aplicación na configuración e tamén se pode colocar nun módulo común, por exemplo, no mesmo eureka:

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

O ficheiro de configuración orde reducirase a unha liña:

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

Se non precisamos ningunha configuración da configuración principal, podemos especificala na nosa configuración e aplicarase durante a xeración. É dicir, se por algún motivo necesitamos un nome único para o servizo de pedidos, simplemente deixaremos o parámetro primavera.aplicación.nome.

Digamos que cómpre engadir configuracións de rexistro personalizadas ao servizo, que se almacenan nun ficheiro separado, por exemplo, logback.xml. Imos crear un grupo separado de configuracións para iso:

Xestiona facilmente as configuracións dos microservizos con microconfig.io

Na configuración básica, indicarémoslle ao marco onde colocar o ficheiro de configuración de rexistro que necesitamos usando un marcador de posición @ConfigDir:

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

En arquivo logback.xml configuramos anexos estándar, que á súa vez tamén poden conter marcadores de posición que o marco cambiará durante a xeración de configuracións, por exemplo:

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

Engadindo importación ás configuracións do servizo retroceder, configuramos automaticamente o rexistro para cada servizo:

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

É hora de familiarizarse con máis detalle con todos os marcadores de posición dispoñibles do marco:

${this@env} - devolve o nome do entorno actual.
${…@name} — devolve o nome do compoñente.
${…@configDir} — devolve a ruta completa ao directorio de configuración do compoñente.
${…@resultDir} — devolve a ruta completa ao directorio de destino do compoñente (os ficheiros resultantes colocaranse neste directorio).
${this@configRoot} — devolve a ruta completa ao directorio raíz do almacén de configuración.

O sistema tamén che permite obter variables de ambiente, por exemplo o camiño a java:
${env@JAVA_HOME}
Ou, xa que o marco está escrito JAVA, podemos obter variables do sistema similares á chamada System::getProperty usando unha estrutura como esta:
${[protexido por correo electrónico]}
Paga a pena mencionar o soporte para a linguaxe de extensión Primavera EL. Na configuración son aplicables as seguintes expresións:

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

e pode usar variables locais nos ficheiros de configuración usando a expresión #var:

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

Así, o framework é unha ferramenta bastante poderosa para axustar e configurar a configuración flexible dos microservizos. O cadro cumpre perfectamente a súa tarefa principal: eliminar o copiar e pegar na configuración, consolidar a configuración e, como resultado, minimizar os posibles erros, ao tempo que lle permite combinar facilmente configuracións e cambialas para diferentes ambientes.

Se estás interesado neste marco, recoméndoche visitar a súa páxina oficial e familiarizarte co completo documentación, ou investigar nas fontes aquí.

Fonte: www.habr.com

Engadir un comentario