Fasil jere konfigirasyon mikrosèvis ak microconfig.io

Youn nan pwoblèm prensipal yo nan devlopman ak operasyon ki vin apre nan mikwosèvis se konfigirasyon konpetan ak egzat nan ka yo. Dapre mwen, yon nouvo kad ka ede ak sa microconfig.io. Li pèmèt ou rezoud kèk travay konfigirasyon aplikasyon woutin byen elegant.

Si ou gen anpil mikwosèvis, epi chak nan yo vini ak pwòp fichye / fichye konfigirasyon li yo, Lè sa a, gen yon gwo pwobabilite pou fè yon erè nan youn nan yo, ki ka trè difisil pou trape san konpetans apwopriye ak yon sistèm anrejistreman. Travay prensipal fondasyon an mete pou tèt li se pou misyon pou minimize paramèt konfigirasyon egzanp, kidonk diminye chans pou ajoute yon erè.

Ann gade yon egzanp. Ann di nou gen yon aplikasyon senp ak yon dosye konfigirasyon yaml. Sa a kapab nenpòt mikwosèvis nan nenpòt lang. Ann wè ki jan kad la ka aplike nan sèvis sa a.

Men, anvan, pou pi gwo konvenyans, se pou nou kreye yon pwojè vid nan Idea IDE, apre yo fin enstale plugin microconfig.io nan li:

Fasil jere konfigirasyon mikrosèvis ak microconfig.io

Nou mete konfigirasyon lansman Plugin la, ou ka itilize konfigirasyon default la, tankou nan D 'anwo a.

Sèvis nou an rele lòd, Lè sa a, nan yon nouvo pwojè nou pral kreye yon estrikti ki sanble:

Fasil jere konfigirasyon mikrosèvis ak microconfig.io

Mete fichye konfigirasyon an nan katab la ak non sèvis la - aplikasyon.yaml. Tout mikwosèvis yo lanse nan kèk kalite anviwònman, kidonk, anplis kreye yon konfigirasyon pou sèvis la li menm, li nesesè dekri anviwònman an tèt li: pou sa nou pral kreye yon katab. envs epi ajoute yon dosye sou li ak non anviwònman k ap travay nou an. Kidonk, fondasyon an pral kreye dosye konfigirasyon pou sèvis nan anviwònman an dev, depi paramèt sa a mete nan paramèt plugin yo.

Estrikti dosye dev.yaml li pral byen senp:

mainorder:
    components:
         - order

Fondasyon an travay ak konfigirasyon ki gwoupe ansanm. Pou sèvis nou an, chwazi yon non pou gwoup la lòd prensipal. Fondasyon an jwenn chak gwoup aplikasyon sa yo nan fichye anviwònman an epi kreye konfigirasyon pou tout nan yo, ke li jwenn nan dosye ki koresponn yo.

Nan dosye a anviwònman sèvis tèt li lòd Ann presize yon sèl paramèt pou kounye a:

spring.application.name: order

Koulye a, ann kouri Plugin la, epi li pral jenere konfigirasyon ki nesesè pou sèvis nou an dapre chemen ki espesifye nan pwopriyete yo:

Fasil jere konfigirasyon mikrosèvis ak microconfig.io

Èske antann nou epi san yo pa enstale yon Plugin, tou senpleman telechaje distribisyon an kad epi kouri li soti nan liy lòd la.
Solisyon sa a apwopriye pou itilize sou yon sèvè bati.

Li se vo anyen ke fondasyon an parfe konprann pwopriyete sentaks, se sa ki, fichye pwopriyete òdinè ki ka itilize ansanm nan yaml konfigirasyon.

Ann ajoute yon lòt sèvis peman epi konplike youn ki deja egziste a.
В lòd:

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

В peman:

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

Pwoblèm prensipal la ak konfigirasyon sa yo se prezans yon gwo kantite kopi-kole nan anviwònman sèvis yo. Ann wè ki jan kad la pral ede debarase m de li. Ann kòmanse ak pi evidan an - prezans nan konfigirasyon eureka nan deskripsyon chak mikwosèvis. Ann kreye yon nouvo anyè ak dosye paramèt la epi ajoute yon nouvo konfigirasyon nan li:

Fasil jere konfigirasyon mikrosèvis ak microconfig.io

Epi, koulye a, ann ajoute liy lan nan chak nan pwojè nou yo #gen ladann eureka.

Kad la pral otomatikman jwenn konfigirasyon eureka a epi kopye li nan dosye konfigirasyon sèvis yo, pandan y ap pa pral kreye yon konfigirasyon eureka separe, paske nou pa pral presize li nan fichye anviwònman an. dev.yaml. Sèvis lòd:

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

Nou kapab tou deplase anviwònman baz done yo nan yon konfigirasyon separe lè nou chanje liy enpòte a #include eureka, oracle.

Li se vo anyen ke fondasyon an swiv chak chanjman lè rejenerasyon fichye konfigirasyon epi mete li nan yon dosye espesyal akote fichye konfigirasyon prensipal la. Antre nan boutèy demi lit li a sanble ak sa a: "Stored 1 property changes to order/diff-application.yaml" Sa a pèmèt ou byen vit detekte chanjman nan dosye konfigirasyon gwo.

Retire pati komen nan konfigirasyon an pèmèt ou debarase m de anpil kopi-kole ki pa nesesè, men li pa pèmèt ou kreye yon konfigirasyon fleksib pou diferan anviwònman - pwen final yo nan sèvis nou yo inik ak difisil-kode, sa a se move. Ann eseye retire sa a.

Yon bon solisyon ta dwe kenbe tout pwen final yo nan yon sèl konfigirasyon ke lòt moun ka fè referans. Pou rezon sa a, sipò pou placeholders te entwodwi nan kad la. Men ki jan dosye konfigirasyon an pral chanje eureka:

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

Koulye a, ann wè ki jan plas sa a ap travay. Sistèm nan jwenn yon eleman ki rele pwen final yo epi chèche siyifikasyon nan li eurekaip, ak Lè sa a, ranplase li nan konfigirasyon nou an. Men, sa ki sou diferan anviwònman? Pou fè sa, kreye yon dosye anviwònman pwen final yo kalite sa a application.dev.yaml. Kad la poukont li, ki baze sou ekstansyon dosye a, deside nan ki anviwònman konfigirasyon sa a fè pati epi chaje li:

Fasil jere konfigirasyon mikrosèvis ak microconfig.io

Kontni dosye dev:

eurekaip: 192.89.89.111
dbip: 192.168.0.100

Nou ka kreye menm konfigirasyon an pou pò sèvis nou yo:

server.port: ${ports@order}.

Tout paramèt enpòtan yo nan yon sèl kote, kidonk diminye chans pou erè akòz paramèt gaye nan dosye konfigirasyon yo.

Kad la bay anpil kote ki fèt pare, pou egzanp, ou ka jwenn non an nan anyè a nan ki fichye a konfigirasyon sitiye epi bay li:

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

Mèsi a sa a, pa gen okenn bezwen anplis presize non aplikasyon an nan konfigirasyon an epi li kapab tou mete nan yon modil komen, pou egzanp, nan menm eureka a:

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

Fichye konfigirasyon an lòd yo pral redwi a yon sèl liy:

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

Si nou pa bezwen okenn anviwònman nan konfigirasyon paran an, nou ka presize li nan konfigirasyon nou an epi li pral aplike pandan jenerasyon an. Sa vle di, si pou kèk rezon nou bezwen yon non inik pou sèvis lòd la, nou pral jis kite paramèt la prentan.aplikasyon.non.

Ann di ou bezwen ajoute anviwònman koutim nan sèvis la, ki estoke nan yon dosye separe, pou egzanp, logback.xml. Ann kreye yon gwoup paramèt separe pou li:

Fasil jere konfigirasyon mikrosèvis ak microconfig.io

Nan konfigirasyon debaz la, nou pral di fondasyon an ki kote yo mete dosye paramèt anrejistreman an nou bezwen lè l sèvi avèk yon plas @ConfigDir:

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

Nan dosye logback.xml nou konfigirasyon estanda apendis yo, ki an vire ka gen ladan tou kote ki kad sa a pral chanje pandan jenerasyon an nan konfigirasyon, pou egzanp:

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

Lè w ajoute enpòte nan konfigirasyon sèvis yo konekte, nou otomatikman jwenn konfigirasyon anrejistreman pou chak sèvis:

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

Li lè pou w fè konesans an plis detay ak tout kote ki disponib nan kad la:

${this@env} - retounen non anviwònman aktyèl la.
${…@name} — retounen non eleman an.
${…@configDir} — retounen tout chemen an nan anyè konfigirasyon eleman an.
${…@resultDir} — retounen tout chemen an nan anyè destinasyon eleman an (fichye ki kapab lakòz yo pral mete nan anyè sa a).
${this@configRoot} — retounen tout chemen an nan anyè rasin magazen konfigirasyon an.

Sistèm nan tou pèmèt ou jwenn varyab anviwònman, pou egzanp chemen an nan java:
${env@JAVA_HOME}
Swa, depi fondasyon an ekri Java, nou ka jwenn varyab sistèm ki sanble ak apèl la System::getProperty lè l sèvi avèk yon estrikti tankou sa a:
${[imèl pwoteje]}
Li vo mansyone sipò pou lang ekstansyon an Spring EL. Ekspresyon sa yo aplikab nan konfigirasyon an:

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

epi ou ka itilize varyab lokal yo nan dosye konfigirasyon lè l sèvi avèk ekspresyon an #var:

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

Kidonk, fondasyon an se yon zouti san patipri pwisan pou ajisteman ak fleksib konfigirasyon mikwosèvis yo. Kad la pafètman akonpli travay prensipal li - elimine kopye-kole nan anviwònman, konsolide anviwònman ak, kòm yon rezilta, minimize erè posib, pandan y ap pèmèt ou fasil konbine konfigirasyon ak chanje yo pou diferan anviwònman.

Si w enterese nan kad sa a, mwen rekòmande vizite paj ofisyèl li yo epi fè konesans ak plen dokimantasyon, oswa fouye nan sous yo isit la.

Sous: www.habr.com

Add nouvo kòmantè