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

Микросервистерді әзірлеудегі және кейінгі жұмысындағы негізгі мәселелердің бірі олардың даналарының сауатты және дәл конфигурациялануы болып табылады. Менің ойымша, бұған жаңа құрылым көмектесе алады microconfig.io. Ол кейбір кәдімгі қолданбаларды конфигурациялау тапсырмаларын өте талғампаз түрде шешуге мүмкіндік береді.

Егер сізде көптеген микросервистер болса және олардың әрқайсысы өз конфигурация файлымен/файлдарымен бірге келсе, олардың бірінде қателік жасау ықтималдығы жоғары, оны тиісті дағдыларсыз және тіркеу жүйесі болмаса, ұстау өте қиын болуы мүмкін. Жүйе өзі үшін орнататын негізгі тапсырма қайталанатын дананы конфигурациялау параметрлерін азайту, осылайша қате қосу ықтималдығын азайту болып табылады.

Бір мысалды қарастырайық. Бізде конфигурация файлы бар қарапайым қолданба бар делік ямл. Бұл кез келген тілдегі кез келген микросервис болуы мүмкін. Бұл қызметке фреймворкты қалай қолдануға болатынын көрейік.

Бірақ алдымен, көбірек ыңғайлы болу үшін оған microconfig.io плагинін орнатқаннан кейін Idea IDE ішінде бос жоба жасайық:

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

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

Біздің қызметіміз тапсырыс деп аталады, содан кейін жаңа жобада біз ұқсас құрылымды жасаймыз:

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

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

Құрылым файла 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

Бұл конфигурациялардың негізгі мәселесі - қызмет параметрлерінде көшіру-қоюдың үлкен көлемінің болуы. Рамка одан құтылуға қалай көмектесетінін көрейік. Ең айқыннан бастайық - конфигурацияның болуы Эврика әрбір микросервис сипаттамасында. Параметрлер файлымен жаңа каталог жасап, оған жаңа конфигурация қосамыз:

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

Ал енді әр жобамызға жолды қосып көрейік #эвриканы қосады.

Рамка эврика конфигурациясын автоматты түрде тауып, оны қызмет конфигурациясының файлдарына көшіреді, ал бөлек эврика конфигурациясы жасалмайды, өйткені біз оны орта файлында көрсетпейміз. dev.yaml. Қызмет бұйрық:

#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}
Немесе, рамка ішінде жазылғандықтан JAVA, біз қоңырауға ұқсас жүйелік айнымалыларды ала аламыз System::getProperty келесідей құрылымды пайдалану:
${[электрондық пошта қорғалған]}
Кеңейтім тілін қолдауды атап өткен жөн Көктемгі EL. Келесі өрнектер конфигурацияда қолданылады:

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

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

Егер сізді осы шеңбер қызықтырса, мен оның ресми бетіне кіріп, толықтай танысуды ұсынамын құжаттама, немесе көздерді қазып алыңыз осында.

Ақпарат көзі: www.habr.com

пікір қалдыру