microconfig.io менен микросервис конфигурацияларын оңой башкарыңыз

Микросервистерди иштеп чыгуудагы жана андан кийинки иштөөдөгү негизги көйгөйлөрдүн бири алардын инстанцияларын компетенттүү жана так конфигурациялоо болуп саналат. Менин оюмча, буга жаңы алкак жардам бере алат microconfig.io. Бул сизге күнүмдүк тиркеме конфигурациясынын тапшырмаларын абдан кооз чечүүгө мүмкүндүк берет.

Эгерде сизде көптөгөн микросервистер бар болсо жана алардын ар бири өзүнүн конфигурация файлы/файлдары менен келсе, анда алардын биринде ката кетирүү ыктымалдыгы жогору, аны тийиштүү чеберчиликсиз жана каттоо системасы жок кармап калуу өтө кыйын. Алкактын өзү үчүн койгон негизги милдети - кайталанма инстанция конфигурациясынын параметрлерин минималдаштыруу, ошону менен катаны кошуу ыктымалдыгын азайтуу.

Келгиле, бир мисал карап көрөлү. Конфигурация файлы бар жөнөкөй тиркеме бар дейли ямл. Бул каалаган тилде каалаган микросервис болушу мүмкүн. Келгиле, алкакты бул кызматка кантип колдонсо болорун карап көрөлү.

Бирок, адегенде, көбүрөөк ыңгайлуулук үчүн, ага microconfig.io плагинин орноткондон кийин, Idea IDEде бош долбоорду түзөлү:

microconfig.io менен микросервис конфигурацияларын оңой башкарыңыз

Биз плагинди ишке киргизүү конфигурациясын орноттук, сиз жогорудагы скриншоттогудай демейки конфигурацияны колдоно аласыз.

Биздин кызмат тартип деп аталат, анда жаңы долбоордо биз окшош структураны түзөбүз:

microconfig.io менен микросервис конфигурацияларын оңой башкарыңыз

Конфигурация файлын кызмат аты менен папкага салыңыз - application.yaml. Бардык микросервистер кандайдыр бир чөйрөдө ишке киргизилет, ошондуктан, кызматтын өзү үчүн конфигурацияны түзүүдөн тышкары, чөйрөнүн өзүн сүрөттөп берүү керек: бул үчүн биз папканы түзөбүз. envs жана ага биздин иш чөйрөбүздүн аталышы менен файлды кошуңуз. Ошентип, алкак чөйрөдөгү кызматтар үчүн конфигурация файлдарын түзөт ишт.ч., бул параметр плагин орнотууларында коюлгандыктан.

Файл структурасы dev.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

Бул конфигурациялардын негизги көйгөйү - бул кызмат орнотууларында көп сандагы көчүрүү-паста болушу. Келгиле, алкак андан арылууга кандайча жардам берерин карап көрөлү. Эң ачыктан баштайлы - конфигурациянын болушу Eureka ар бир микросервистин сүрөттөмөсүндө. Келгиле, орнотуулар файлы менен жаңы каталог түзүп, ага жаңы конфигурацияны кошолу:

microconfig.io менен микросервис конфигурацияларын оңой башкарыңыз

Эми ар бир долбоорлорубузга сызыктарды кошолу #эврика кирет.

Алкак эврика конфигурациясын автоматтык түрдө таап, аны кызматтын конфигурациясынын файлдарына көчүрөт, ал эми өзүнчө эврика конфигурациясы түзүлбөйт, анткени биз аны чөйрө файлында көрсөтпөйбүз. dev.yaml. Кызмат тартип:

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

Импорт сызыгын өзгөртүү менен биз маалымат базасынын жөндөөлөрүн өзүнчө конфигурацияга жылдыра алабыз #include eureka, oracle.

Белгилей кетсек, алкак конфигурация файлдарын регенерациялоодо ар бир өзгөрүүгө көз салып, аны негизги конфигурация файлынын жанына атайын файлга жайгаштырат. Анын журналындагы жазуу төмөнкүдөй көрүнөт: “Сакталган 1 касиет төмөнкүгө өзгөрөт order/diff-application.yaml" Бул чоң конфигурация файлдарындагы өзгөрүүлөрдү тез аныктоого мүмкүндүк берет.

Конфигурациянын жалпы бөлүктөрүн алып салуу көптөгөн керексиз көчүрүү-пасталардан арылууга мүмкүндүк берет, бирок ар кандай чөйрөлөр үчүн конфигурацияны ийкемдүү түзүүгө мүмкүндүк бербейт - биздин кызматтардын акыркы чекиттери уникалдуу жана катуу коддолгон, бул жаман. Муну алып салууга аракет кылалы.

Бардык акыркы чекиттерди башкалар шилтеме кыла ала турган бир конфигурацияда сактоо жакшы чечим болмок. Бул үчүн алкакка толтуруучуларды колдоо киргизилген. Конфигурация файлы ушундайча өзгөрөт Eureka:

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

Эми бул толтургуч кантип иштээрин карап көрөлү. Система аталган компонентти табат акыркы чекиттер жана андан маани издейт eurekaip, анан аны конфигурациябызга алмаштырат. Бирок ар кандай чөйрөлөр жөнүндө эмне айтууга болот? Бул үчүн, орнотуулар файлын түзүңүз акыркы чекиттер төмөнкү түрү application.dev.yaml. Фреймворк өз алдынча, файл кеңейтүүсүнө негизделген, бул конфигурация кайсы чөйрөгө таандык экенин чечет жана аны жүктөйт:

microconfig.io менен микросервис конфигурацияларын оңой башкарыңыз

Dev файлынын мазмуну:

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}

Ушунун аркасында конфигурацияда тиркеменин атын кошумча көрсөтүүнүн кереги жок жана аны жалпы модулда, мисалы, ошол эле эврикада жайгаштырса болот:

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

Конфигурация файлы тартип бир сапка кыскартылат:

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

Эгерде бизге ата-эне конфигурациясынан эч кандай жөндөө керек болбосо, биз аны конфигурациябызда көрсөтө алабыз жана ал генерация учурунда колдонулат. Башкача айтканда, кандайдыр бир себептерден улам бизге заказ кызматы үчүн уникалдуу аталыш керек болсо, биз жөн гана параметрди калтырабыз жаз.колдонмо.аты.

Кызматка өзүнчө файлда сакталган ыңгайлаштырылган журнал орнотууларын кошуу керек дейли, мисалы, logback.xml. Ал үчүн орнотуулардын өзүнчө тобун түзөлү:

microconfig.io менен микросервис конфигурацияларын оңой башкарыңыз

Негизги конфигурацияда биз рамкага толтургучту колдонуу менен керектүү журнал орнотуулары файлын кайда жайгаштырууну айтабыз @ConfigDir:

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

Файлда logback.xml биз стандарттык тиркемелерди конфигурациялайбыз, алар өз кезегинде конфигурацияларды түзүү учурунда алкак өзгөрө турган толтургучтарды да камтышы мүмкүн, мисалы:

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

Кызмат конфигурацияларына импортту кошуу менен кирүү, биз ар бир кызмат үчүн автоматтык түрдө конфигурацияланган журналды алабыз:

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

Алкактын бардык жеткиликтүү толтургучтары менен кененирээк таанышууга убакыт келди:

${this@env} - учурдагы чөйрөнүн атын кайтарат.
${…@name} — компоненттин атын кайтарат.
${…@configDir} — компоненттин конфигурация каталогуна толук жолду кайтарат.
${…@resultDir} — компоненттин көздөгөн каталогуна толук жолду кайтарат (жыйынтыктагы файлдар ушул каталогго жайгаштырылат).
${this@configRoot} — конфигурация дүкөнүнүн түпкү каталогуна толук жолду кайтарат.

Система ошондой эле айлана-чөйрөнүн өзгөрмөлөрүн алууга мүмкүндүк берет, мисалы, Java жолун:
${env@JAVA_HOME}
Же, анткени алкак ичинде жазылган JAVA, биз чалууга окшош система өзгөрмөлөрүн ала алабыз System::getProperty мындай структураны колдонуу:
${[электрондук почта корголгон]}
Кеңейтүү тилин колдоону белгилей кетүү керек Жазгы ЭЛ. Конфигурацияда төмөнкү сөз айкаштары колдонулат:

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

Ошентип, алкак микросервистерди тактоо жана ийкемдүү конфигурациялоо үчүн кыйла күчтүү курал болуп саналат. Фреймворк өзүнүн негизги милдетин эң сонун аткарат - жөндөөлөрдөгү көчүрүп чаптоолорду жок кылуу, орнотууларды консолидациялоо жана натыйжада мүмкүн болуучу каталарды азайтуу, ошол эле учурда конфигурацияларды оңой айкалыштырууга жана аларды ар кандай чөйрөлөр үчүн өзгөртүүгө мүмкүндүк берет.

Эгерде сизди бул алкак кызыктырса, мен анын расмий баракчасына кирип, толук менен таанышууну сунуштайм документтер, же булактарды казыңыз бул жерде.

Source: www.habr.com

Комментарий кошуу