Viena no galvenajÄm problÄmÄm mikropakalpojumu izstrÄdÄ un turpmÄkajÄ darbÄ«bÄ ir kompetenta un precÄ«za to gadÄ«jumu konfigurÄcija. ManuprÄt, jauns ietvars var palÄ«dzÄt Å”ajÄ jautÄjumÄ
Ja jums ir daudz mikropakalpojumu, un katram no tiem ir savs konfigurÄcijas fails/faili, tad pastÄv liela varbÅ«tÄ«ba, ka kÄdÄ no tiem tiks pieļauta kļūda, kuru var bÅ«t ļoti grÅ«ti uztvert bez atbilstoÅ”as āāprasmes un reÄ£istrÄÅ”anas sistÄmas. Galvenais uzdevums, ko ietvars sev nosaka, ir minimizÄt dublÄtos gadÄ«jumu konfigurÄcijas parametrus, tÄdÄjÄdi samazinot kļūdas pievienoÅ”anas iespÄjamÄ«bu.
ApskatÄ«sim piemÄru. PieÅemsim, ka mums ir vienkÄrÅ”a lietojumprogramma ar konfigurÄcijas failu jams. Tas var bÅ«t jebkurÅ” mikropakalpojums jebkurÄ valodÄ. ApskatÄ«sim, kÄ ietvaru var piemÄrot Å”im pakalpojumam.
Bet vispirms lielÄkas ÄrtÄ«bas labad izveidosim tukÅ”u projektu Idea IDE pÄc spraudÅa microconfig.io instalÄÅ”anas tajÄ:
MÄs iestatÄ«jÄm spraudÅa palaiÅ”anas konfigurÄciju, varat izmantot noklusÄjuma konfigurÄciju, kÄ parÄdÄ«ts iepriekÅ” redzamajÄ ekrÄnuzÅÄmumÄ.
MÅ«su pakalpojumu sauc par pasÅ«tÄ«jumu, tad jaunÄ projektÄ mÄs izveidosim lÄ«dzÄ«gu struktÅ«ru:
Ievietojiet konfigurÄcijas failu mapÄ ar pakalpojuma nosaukumu - pieteikums.yaml. Visi mikropakalpojumi tiek palaisti kaut kÄdÄ vidÄ, tÄpÄc papildus paÅ”a pakalpojuma konfigurÄcijas izveidei ir jÄapraksta arÄ« pati vide: Å”im nolÅ«kam mÄs izveidosim mapi. apÅem un pievienojiet tam failu ar mÅ«su darba vides nosaukumu. TÄdÄjÄdi sistÄma izveidos pakalpojumu konfigurÄcijas failus vidÄ dev, jo Å”is parametrs ir iestatÄ«ts spraudÅa iestatÄ«jumos.
Faila struktÅ«ra dev.yaml tas bÅ«s pavisam vienkÄrÅ”i:
mainorder:
components:
- order
Ietvars darbojas ar konfigurÄcijÄm, kas ir sagrupÄtas. MÅ«su pakalpojumam izvÄlieties grupas nosaukumu galvenais pasÅ«tÄ«jums. Katru Å”Ädu lietojumprogrammu grupu ietvars atrod vides failÄ un izveido tÄm visÄm konfigurÄcijas, kuras atrod attiecÄ«gajÄs mapÄs.
PaÅ”Ä pakalpojuma iestatÄ«jumu failÄ rÄ«kojums PagaidÄm norÄdÄ«sim tikai vienu parametru:
spring.application.name: order
Tagad palaidÄ«sim spraudni, un tas Ä£enerÄs mÅ«su pakalpojumam nepiecieÅ”amo konfigurÄciju atbilstoÅ”i rekvizÄ«tos norÄdÄ«tajam ceļam:
Var
Å is risinÄjums ir piemÄrots izmantoÅ”anai bÅ«vÄÅ”anas serverÄ«.
Ir vÄrts atzÄ«mÄt, ka sistÄma lieliski saprot Ä«paÅ”ums sintakse, tas ir, parastie rekvizÄ«tu faili, kurus var izmantot kopÄ jams konfigurÄcijas.
Pievienosim vÄl vienu pakalpojumu maksÄjums un sarežģī esoÅ”o.
Š rÄ«kojums:
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
Š maksÄjums:
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
GalvenÄ Å”o konfigurÄciju problÄma ir liela daudzuma kopÄÅ”anas un ielÄ«mÄÅ”anas klÄtbÅ«tne pakalpojuma iestatÄ«jumos. ApskatÄ«sim, kÄ ietvars palÄ«dzÄs no tÄ atbrÄ«voties. SÄksim ar acÄ«mredzamÄko - konfigurÄcijas klÄtbÅ«tni Eureka katra mikropakalpojuma aprakstÄ. Izveidosim jaunu direktoriju ar iestatÄ«jumu failu un pievienosim tam jaunu konfigurÄciju:
Un tagad pievienosim rindiÅu katram mÅ«su projektam #iekļauts eureka.
Ietvars automÄtiski atradÄ«s eureka konfigurÄciju un kopÄs to pakalpojuma konfigurÄcijas failos, savukÄrt atseviŔķa eureka konfigurÄcija netiks izveidota, jo mÄs to nenorÄdÄ«sim vides failÄ dev.yaml. apkalpoÅ”ana rÄ«kojums:
#include eureka
server.port: 9999
spring.application.name: order
db.url: 192.168.0.100
MÄs varam arÄ« pÄrvietot datu bÄzes iestatÄ«jumus atseviÅ”Ä·Ä konfigurÄcijÄ, mainot importÄÅ”anas rindiÅu uz #iekļauts eureka, orÄkuls.
Ir vÄrts atzÄ«mÄt, ka sistÄma izseko katru izmaiÅu, atjaunojot konfigurÄcijas failus, un ievieto to Ä«paÅ”Ä failÄ blakus galvenajam konfigurÄcijas failam. Ieraksts tÄ Å¾urnÄlÄ izskatÄs Å”Ädi: āSaglabÄts 1 rekvizÄ«ts mainÄs uz order/diff-application.yaml" Tas ļauj Ätri noteikt izmaiÅas lielos konfigurÄcijas failos.
KopÄjo konfigurÄcijas daļu noÅemÅ”ana ļauj atbrÄ«voties no daudz nevajadzÄ«gas kopÄÅ”anas-ielÄ«mÄÅ”anas, taÄu neļauj elastÄ«gi izveidot konfigurÄciju dažÄdÄm vidÄm - mÅ«su pakalpojumu galapunkti ir unikÄli un kodÄti, tas ir slikti. MÄÄ£inÄsim to noÅemt.
Labs risinÄjums bÅ«tu saglabÄt visus galapunktus vienÄ konfigurÄcijÄ, uz kuru var atsaukties citi. Å im nolÅ«kam sistÄmÄ ir ieviests atbalsts vietturiem. Å Ädi mainÄ«sies konfigurÄcijas fails Eureka:
client:
serviceUrl:
defaultZone: http://${endpoints@eurekaip}:6782/eureka/
Tagad apskatÄ«sim, kÄ darbojas Å”is vietturis. SistÄma atrod komponentu ar nosaukumu vÄrtÄtie un meklÄ tajÄ jÄgu eurekaip, un pÄc tam aizstÄj to mÅ«su konfigurÄcijÄ. Bet kÄ ar dažÄdÄm vidÄm? Lai to izdarÄ«tu, izveidojiet iestatÄ«jumu failu vÄrtÄtie Å”Äda veida application.dev.yaml. Ietvars neatkarÄ«gi, pamatojoties uz faila paplaÅ”inÄjumu, izlemj, kurai videi Ŕī konfigurÄcija pieder, un ielÄdÄ to:
IzstrÄdÄtÄja faila saturs:
eurekaip: 192.89.89.111
dbip: 192.168.0.100
MÄs varam izveidot tÄdu paÅ”u konfigurÄciju mÅ«su pakalpojumu portiem:
server.port: ${ports@order}.
Visi svarÄ«gie iestatÄ«jumi ir vienuviet, tÄdÄjÄdi samazinot kļūdu iespÄjamÄ«bu konfigurÄcijas failos izkliedÄtu parametru dÄļ.
Ietvars nodroÅ”ina daudzus gatavus vietturus, piemÄram, varat iegÅ«t tÄ direktorija nosaukumu, kurÄ atrodas konfigurÄcijas fails, un pieŔķirt tam:
#include eureka, oracle
server.port: ${ports@order}
spring.application.name: ${this@name}
Pateicoties tam, konfigurÄcijÄ nav papildus jÄnorÄda lietojumprogrammas nosaukums un to var ievietot arÄ« kopÄjÄ modulÄ«, piemÄram, tajÄ paÅ”Ä eurekÄ:
client:
serviceUrl:
defaultZone: http://${endpoints@eurekaip}:6782/eureka/
spring.application.name: ${this@name}
KonfigurÄcijas fails rÄ«kojums tiks samazinÄts lÄ«dz vienai rindai:
#include eureka, oracle
server.port: ${ports@order}
Ja mums nav nepiecieÅ”ams neviens iestatÄ«jums no vecÄkkonfigurÄcijas, mÄs varam to norÄdÄ«t savÄ konfigurÄcijÄ, un tas tiks lietots Ä£enerÄÅ”anas laikÄ. Tas ir, ja kÄda iemesla dÄļ mums ir nepiecieÅ”ams unikÄls pasÅ«tÄ«juma pakalpojuma nosaukums, mÄs vienkÄrÅ”i atstÄsim parametru pavasaris.pieteikums.nosaukums.
PieÅemsim, ka pakalpojumam ir jÄpievieno pielÄgoti reÄ£istrÄÅ”anas iestatÄ«jumi, kas tiek saglabÄti atseviÅ”Ä·Ä failÄ, piemÄram, logback.xml. Izveidosim tai atseviŔķu iestatÄ«jumu grupu:
PamatkonfigurÄcijÄ mÄs norÄdÄ«sim ietvaram, kur novietot mums nepiecieÅ”amo reÄ£istrÄÅ”anas iestatÄ«jumu failu, izmantojot vietturi @ConfigDir:
microconfig.template.logback.fromFile: ${logback@configDir}/logback.xml
FailÄ logback.xml mÄs konfigurÄjam standarta papildinÄjumus, kas savukÄrt var saturÄt arÄ« vietturus, kurus ietvars mainÄ«s konfigurÄciju Ä£enerÄÅ”anas laikÄ, piemÄram:
<file>logs/${this@name}.log</file>
Pakalpojuma konfigurÄcijÄm pievienojot importÄÅ”anu logback, mÄs automÄtiski saÅemam konfigurÄtu reÄ£istrÄÅ”anu katram pakalpojumam:
#include eureka, oracle, logback
server.port: ${ports@order}
Ir pienÄcis laiks sÄ«kÄk iepazÄ«ties ar visiem pieejamajiem ietvara vietturiem:
${this@env} - atgriež paÅ”reizÄjÄs vides nosaukumu.
${ā¦@name} ā atgriež komponenta nosaukumu.
${ā¦@configDir} ā atgriež pilnu ceļu uz komponenta konfigurÄcijas direktoriju.
${ā¦@resultDir} ā atgriež pilnu ceļu uz komponenta mÄrÄ·a direktoriju (iegÅ«tie faili tiks ievietoti Å”ajÄ direktorijÄ).
${this@configRoot} ā atgriež pilnu ceļu uz konfigurÄcijas krÄtuves saknes direktoriju.
SistÄma arÄ« ļauj iegÅ«t vides mainÄ«gos, piemÄram, ceļu uz java:
${env@JAVA_HOME}
Vai nu, jo ietvars ir ierakstÄ«ts JAVA, mÄs varam iegÅ«t zvanam lÄ«dzÄ«gus sistÄmas mainÄ«gos SistÄma::getProperty izmantojot Å”Ädu struktÅ«ru:
${[e-pasts aizsargÄts]}
Ir vÄrts pieminÄt paplaÅ”inÄjuma valodas atbalstu Pavasaris EL. KonfigurÄcijÄ ir piemÄrojamas Å”Ädas izteiksmes:
connection.timeoutInMs: #{5 * 60 * 1000}
datasource.maximum-pool-size: #{${[email protected]} + 10}
un jÅ«s varat izmantot vietÄjos mainÄ«gos konfigurÄcijas failos, izmantojot izteiksmi #var:
#var feedRoot: ${[email protected]}/feed
folder:
root: ${this@feedRoot}
success: ${this@feedRoot}/archive
error: ${this@feedRoot}/error
TÄdÄjÄdi ietvars ir diezgan spÄcÄ«gs instruments mikropakalpojumu precizÄÅ”anai un elastÄ«gai konfigurÄÅ”anai. Karkass lieliski pilda savu galveno uzdevumu - novÄrÅ” copy-paste iestatÄ«jumos, konsolidÄ iestatÄ«jumus un rezultÄtÄ samazina iespÄjamÄs kļūdas, vienlaikus ļaujot Ärti apvienot konfigurÄcijas un mainÄ«t tÄs dažÄdÄm vidÄm.
Ja jÅ«s interesÄ Å”is ietvars, iesaku apmeklÄt tÄ oficiÄlo lapu un iepazÄ«ties ar pilnu
Avots: www.habr.com