Бо microconfig.io конфигуратсияҳои хидматрасонии хурдро ба осонӣ идора кунед

Яке аз мушкилоти асосӣ дар таҳия ва фаъолияти минбаъдаи микросервисҳо конфигуратсияи салоҳиятнок ва дақиқи мисолҳои онҳо мебошад. Ба назари ман, чаҳорчӯбаи нав метавонад дар ин кор кӯмак кунад microconfig.io. Он ба шумо имкон медиҳад, ки баъзе вазифаҳои муқаррарии конфигуратсияи барномаро хеле шево ҳал кунед.

Агар шумо микросервисҳои зиёде дошта бошед ва ҳар кадоми онҳо бо файл/файлҳои конфигуратсияи худ омадаанд, пас эҳтимоли хато дар яке аз онҳо вуҷуд дорад, ки бидуни маҳорати дуруст ва системаи сабти ном дарёфт кардан хеле душвор аст. Вазифаи асосие, ки чаҳорчӯба барои худ муқаррар мекунад, кам кардани параметрҳои конфигуратсияи такрории мисолҳо ва ба ин васила кам кардани эҳтимолияти илова кардани хато мебошад.

Биёед як мисолро дида бароем. Фарз мекунем, ки мо як барномаи оддӣ бо файли конфигуратсия дорем ямл. Ин метавонад ҳама гуна хидматрасонии хурд бо ҳама забон бошад. Биёед бубинем, ки чӣ тавр чаҳорчӯбаро ба ин хидмат татбиқ кардан мумкин аст.

Аммо аввал, барои роҳати бештар, биёед пас аз насб кардани плагини microconfig.io дар он дар Idea IDE як лоиҳаи холӣ созем:

Бо microconfig.io конфигуратсияҳои хидматрасонии хурдро ба осонӣ идора кунед

Мо конфигуратсияи оғози плагинро насб кардем, шумо метавонед конфигуратсияи пешфарзро, тавре ки дар скриншоти боло истифода баред, истифода баред.

Хидмати мо фармоиш номида мешавад, пас дар лоиҳаи нав мо сохтори шабеҳро эҷод мекунем:

Бо microconfig.io конфигуратсияҳои хидматрасонии хурдро ба осонӣ идора кунед

Файли конфигуратсияро дар ҷузвдон бо номи хидмат ҷойгир кунед - ариза.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

Мушкилоти асосии ин конфигуратсияҳо мавҷудияти миқдори зиёди нусхабардорӣ дар танзимоти хидмат мебошад. Биёед бубинем, ки чӣ тавр чаҳорчӯба барои аз он халос шудан кӯмак хоҳад кард. Биёед бо равшантарин - мавҷудияти конфигуратсия оғоз кунем эврика дар тавсифи ҳар як хидматрасонии хурд. Биёед бо файли танзимот директорияи нав эҷод кунем ва ба он конфигуратсияи нав илова кунем:

Бо microconfig.io конфигуратсияҳои хидматрасонии хурдро ба осонӣ идора кунед

Ва акнун биёед ба ҳар як лоиҳаи худ сатр илова кунем #эврикаро дар бар мегирад.

Чаҳорчӯба ба таври худкор конфигуратсияи эврикаро пайдо мекунад ва онро ба файлҳои конфигуратсияи хидматрасонӣ нусхабардорӣ мекунад, дар ҳоле ки конфигуратсияи алоҳидаи эврика сохта намешавад, зеро мо онро дар файли муҳити зист муайян намекунем. дев.ямл. Хизмат Фармоиш:

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

Мо инчунин метавонем танзимоти пойгоҳи додаҳоро бо тағир додани хати воридот ба конфигуратсияи алоҳида интиқол диҳем #eureka, oracle дохил кунед.

Бояд қайд кард, ки чаҳорчӯба ҳар як тағиротро ҳангоми барқароркунии файлҳои конфигуратсия пайгирӣ мекунад ва онро дар файли махсус дар паҳлӯи файли конфигуратсияи асосӣ ҷойгир мекунад. Воридшавӣ дар сабти он чунин менамояд: "1 амвол захирашуда ба он тағир меёбад order/diff-application.yaml" Ин ба шумо имкон медиҳад, ки тағиротро ба файлҳои конфигуратсияи калон зуд муайян кунед.

Хориҷ кардани қисмҳои умумии конфигуратсия ба шумо имкон медиҳад, ки аз бисёр нолозим нусхабардорӣ халос шавед, аммо ба шумо имкон намедиҳад, ки конфигуратсияро барои муҳитҳои гуногун чандир созед - нуқтаҳои ниҳоии хидматҳои мо беназир ва сахт рамзгузорӣ шудаанд, ин бад аст. Биёед кӯшиш кунем, ки инро бартараф кунем.

Як ҳалли хуб ин нигоҳ доштани ҳамаи нуқтаҳои ниҳоӣ дар як конфигуратсияест, ки дигарон метавонанд истинод кунанд. Бо ин мақсад дар чаҳорчӯбаи дастгирии ҷойнишинҳо ҷорӣ карда шудааст. Ҳамин тавр файли конфигуратсия тағир меёбад эврика:

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

Акнун биёед бубинем, ки ин ҷойнишин чӣ гуна кор мекунад. Система як ҷузъи ном дорад нуқтаҳои ниҳоӣ ва дар он маъно мељўяд эврикаип, ва сипас онро ба конфигуратсияи мо иваз мекунад. Аммо дар бораи муҳитҳои гуногун чӣ гуфтан мумкин аст? Барои ин, файли танзимотро дар нуқтаҳои ниҳоӣ навъи зерин 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}
Ё, азбаски чаҳорчӯба дар он навишта шудааст Ҷавон, мо метавонем тағирёбандаҳои системаро ба занг монанд ба даст орем 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

Ҳамин тариқ, чаҳорчӯба як воситаи хеле пурқувват барои танзими дақиқ ва конфигуратсияи чандирии хидматрасониҳои хурд мебошад. Чаҳорчӯба вазифаи асосии худро ба таври комил иҷро мекунад - аз байн бурдани нусхабардорӣ дар танзимот, муттаҳид кардани танзимот ва дар натиҷа, кам кардани хатогиҳои имконпазир, дар ҳоле ки ба шумо имкон медиҳад, ки конфигуратсияҳоро ба осонӣ якҷоя кунед ва онҳоро барои муҳитҳои гуногун иваз кунед.

Агар шумо ба ин чаҳорчӯба таваҷҷӯҳ дошта бошед, ман тавсия медиҳам, ки ба саҳифаи расмии он ворид шавед ва бо пурра шинос шавед ҳуҷҷатгузорӣ, ё ба манбаъҳо кобед дар ин ҷо.

Манбаъ: will.com

Илова Эзоҳ