Ăks peamisi probleeme mikroteenuste arendamisel ja hilisemal kasutamisel on nende instantside Ă”ige ja tĂ€pne seadistamine. Minu arvates vĂ”ib sellele aidata uus raamistik . See vĂ”imaldab elegantsemalt lahendada teatud rutiinsed rakenduste seadistamise ĂŒlesanded.
Kui teil on palju mikroteenuseid ja igaĂŒhel neist on oma seadistusfail(e), siis on tĂ”enĂ€oliselt, et teete ĂŒkskĂ”ik milles vea, mida ilma piisava oskuse ja logimise sĂŒsteemita on vĂ€ga raske tuvastada. Raamistiku peamine ĂŒlesanne on vĂ€hendada dubleeritud instantsi seadistusparameetreid, seelĂ€bi vĂ€hendades vea tekkimise vĂ”imalust.
Vaatame nĂ€ite. Oletame, et on olemas lihtne rakendus koos konfiguratsioonifailiga yaml. See vĂ”ib olla ĂŒkskĂ”ik milline mikroteenus mis tahes keeles. Vaatame, kuidas seda raamistikku saaks sellele teenusele rakendada.
Kuid kĂ”igepealt loome Idea IDE-s tĂŒhja projekti, installides sinna eelnevalt microconfig.io pistikprogrammi:

Seame plugina kĂ€ivitamiseks vajalik konfiguratsioon, kasutades vaikevalikuid, nagu ĂŒlaltoodud ekraanipildil.
Meie teenus kannab nime order, seega loome uues projektis sarnase struktuuri:

Kopeerime teenuse nime kandva kausta konfiguratsioonifaili â application.yaml. KĂ”ik mikroteenused kĂ€ivitatakse mingis keskkonnas, seega lisaks teenuse konfiguratsiooni loomisele on vajalik ka keskkonna defineerimine: selleks loome kausta envs ja lisame sellesse faili, mis kannab meie töökeskkonna nime. Seega loob raamistik konfiguratsioonifailid teenuste jaoks keskkonnas dev, kuna plugina seadistustes on mÀÀratud just see parameeter.
Faili struktuur dev.yaml oleb ĂŒsna lihtne:
mainorder:
components:
- orderRaamistik töötab konfiguratsioonidega, mis on rĂŒhmitatud gruppidesse. Meie teenuse jaoks valime grupi nime mainorder. Raamistik leiab iga sellise grupi rakendused keskkonnafailist ja loob neile konfiguratsioonid, mida ta vastavatest kaustadest leiab.
Teenuse seadistusfailis order mÀÀrame esialgu ainult ĂŒhe parameetri:
spring.application.name: orderNĂŒĂŒd aktiveerime plugina, mis genereerib meie teenuse jaoks vajalikud seadistused antud omaduste teel:

Saame ilma plugina paigaldamiseta, lihtsalt allalaadides raamistiku distributsiooni ja kÀivitades selle kÀsurealt.
Selline lahendus sobib kokku kogumise serveris kasutamiseks.
Oluline on mĂ€rkida, et raamistiku on suurepĂ€rane mĂ”ista property sĂŒntaksit, see tĂ€hendab tavalisi property faile, mida saab kasutada koos yaml konfiguratsioonidega.
Lisame veel ĂŒhe teenuse payment ja keerukust olemasolevast samal ajal.
V order:
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.100V payment:
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.100Nende konfiguratsioonide peamine probleem on suur kogus kopeerimist teenuste seadistustes. Vaatame, kuidas raamistiku aitab seda vĂ€ltida. Alustame kĂ”ige ilmsemast â konfiguratsioonist eureka iga mikroteenuse kirjelduse puhul. Loome uue kaustu seadistuste failiga ja lisame sinna uue seadistuse:

Ja lisame nĂŒĂŒd igasse meie projekti rea #include eureka.
Raamistiku automaatselt leidub eureka konfiguratsioon ja kopeerib selle teenuste konfiguratsioonifailidesse, samas ei luheta eraldi eureka konfiguratsiooni, kuna me ei mÀÀratle seda keskkonnafailis. dev.yaml. Teenus order:
#include eureka
server.port: 9999
spring.application.name: order
db.url: 192.168.0.100Samuti saame andmebaasi seaded eraldi konfiguratsiooni vÀlja tuua, muutes impordirea. #include eureka, oracle.
Oluline on mÀrkida, et iga muudatus, kui raamistik genereerib konfiguratsioonifailid uuesti, jÀlgib ja salvestab eraldi faili pÔhifaili kÔrval. Sissekanne selle logis nÀeb vÀlja jÀrgmine: "Salvestatud 1 omaduse muudatus order/diff-application.yaml". See vÔimaldab kiiresti avastada muudatusi suurtes konfiguratsioonifailides.
Ăhisosa konfiguratsiooni vĂ€lja toomine vĂ”imaldab vĂ€ltida liigset kopeerimist, kuid ei vĂ”imalda paindlikult luua konfiguratsiooni erinevate keskkondade jaoks â meie teenuste lĂ”pp-punktid on ainulaadsed ja kĂ”vasti kodeeritud, mis on halb. Proovime seda kĂ”rvaldada.
Hea lahendus on hoida kĂ”ik lĂ”pp-punktid ĂŒhes konfiguratsioonis, millele vĂ”iksid viidata teised. Selleks on raamistikku inteeritud tugiteenuste toetamine. Nii muutub konfiguratsioonifail. eureka:
klient:
teenuseUrl:
vaikeala: http://${endpoints@eurekaip}:6782/eureka/NĂŒĂŒd vaatame, kuidas see mÀÀrang töötab. SĂŒsteem leiab komponendi nimega endpoints ja otsib sealt vÀÀrtust eurekaip, pĂ€rast mida sisestab selle meie konfiguratsiooni. Kuidas aga erinevate keskkondadega? Selleks loome seadistuste faili, mille sisu on endpoints jĂ€rgnev application.dev.yaml. Raamistik otsustab ise faili laiuse pĂ”hjal, mille keskkonnaga see konfiguratsioon seondub, ja laadib selle sisse:

dev faili sisu:
eurekaip: 192.89.89.111
dbip: 192.168.0.100Sama konfiguratsiooni saame luua ka meie teenuste sadamate jaoks:
server.port: ${ports@order}.KĂ”ik olulised seaded on ĂŒhes kohas, vĂ€hendades seelĂ€bi vea tekkimise tĂ”enĂ€osust, kui parameetrid on hajutatud konfiguratsioonifailides.
Raamistik pakub mitmeid juba valmis mÀÀranguid, nÀiteks saab kÀtte faili konfiguratsiooni direktoriumi nime ja mÀÀrata selle:
#include eureka, oracle
server.port: ${ports@order}
spring.application.name: ${this@name}Selle tĂ”ttu ei ole vaja eraldi mĂ€rkida rakenduse nime konfiguratsioonis, vaid selle saab ka ĂŒhte ĂŒldmoduuli viia, nĂ€iteks samasse eureka:
klient:
teenuseUrl:
vaikeala: http://${endpoints@eurekaip}:6782/eureka/
spring.application.name: ${this@name}Konfiguratsioonifail order lĂŒhendab ĂŒhe reale:
#include eureka, oracle
server.port: ${ports@order}Kui mÔni seade vanematest seadistustest pole vajalik, saame selle mÀÀrata meie konfiguratsioonis ja just see rakendatakse genereerimisel. See tÀhendab, et kui meil on mingil pÔhjusel vaja unikaalset nime teenusele order, jÀtame lihtsalt parameetri spring.application.name.
Oletame, et teenusele tuleb lisada kohandatud logimiseseaded, mis salvestatakse eraldi faili, nĂ€iteks logback.xml. Loome selle jaoks eraldi seadistuste rĂŒhma:

PÔhikonstruktsioonis mÀÀrame raamistikule, kuhu paigutada vajalik logimisfail, kasutades placeholder'i @ConfigDir:
microconfig.template.logback.fromFile: ${logback@configDir}/logback.xmlFailis logback.xml konfigureerime standardsed appenderid, mis vÔivad samuti sisaldada placeholder'e, mida raamistik muudab konfiguratsioonide genereerimise ajal, nÀiteks:
logs/${this@name}.logLisades teenuste konfiguratsioonidesse importi logback, saame automaatselt seadistatud logimise igale teenusele:
#include eureka, oracle, logback
server.port: ${ports@order}On aeg tutvuda lÀhemalt kÔigi raamistiku poolt pakutavate placeholder'itega:
${this@env} â tagastab praeguse keskkonna nime.
${âŠ@name} â tagastab komponendi nime.
${âŠ@configDir} â tagastab komponendi config katalooge kogu tee.
${âŠ@resultDir} â tagastab komponendi sihtkatalooge kogu tee (saadud failid paigutatakse sellesse katalooge).
${this@configRoot} â tagastab konfigureerimise baas katalooge kogu tee.
Samuti vĂ”imaldab sĂŒsteem saada keskkonnavariatsioone, nĂ€iteks java tee:
${env@JAVA_HOME}
VĂ”i kuna raamistik on kirjutatud JAVA, saame sĂŒsteemi muutujaid sarnase ĂŒleskutsega saada System::getProperty sellise konstruktsiooni abil:
${system@os.name}
Tasub mainida laienduste keele toetust Spring EL. Konfiguratsioonis kehtivad sarnased vÀljendid:
connection.timeoutInMs: #{5 * 60 * 1000}
datasource.maximum-pool-size: #{${this@datasource.minimum-pool-size} + 10} ja saab kasutada lokaalvariatsioone konfiguratsioonifailides vÀljendite abil. #var:
#var feedRoot: ${system@user.home}/feed
folder:
root: ${this@feedRoot}
success: ${this@feedRoot}/archive
error: ${this@feedRoot}/errorNii on raamistik ĂŒsna vĂ”imas tööriist mikroteenuste konfigureerimise peeneks ja paindlikuks kohandamiseks. Raamistik tĂ€idab oma pĂ”hiĂŒlesannet suurepĂ€raselt â etteteatamata kopeerimise vĂ€ltimine seadistustes, seadistuste koondamine ning seepĂ€rast vĂ”imalike vigade minimeerimine, vĂ”imaldades samal ajal konfigureerimiste hĂ”lpsat kombineerimist ja nende muutmist erinevate keskkondade jaoks.
Kui see raamistik teid huvitab, soovitan kĂŒlastada selle ametlikku lehte ja tutvuda tĂ€ieliku , vĂ”i uurida lĂ€htekoodis .
Allikas: habr.com
