Sayon nga pagdumala sa microservice configurations gamit ang microconfig.io

Usa sa mga nag-unang problema sa pag-uswag ug sunod nga operasyon sa mga microservice mao ang takos ug tukma nga pag-configure sa ilang mga higayon. Sa akong opinyon, ang usa ka bag-ong balangkas makatabang niini microconfig.io. Gitugotan ka niini nga masulbad ang pipila ka naandan nga mga buluhaton sa pag-configure sa aplikasyon nga elegante.

Kung ikaw adunay daghang mga microservice, ug ang matag usa niini adunay kaugalingon nga configuration file / file, nan adunay usa ka taas nga posibilidad nga makahimo usa ka sayup sa usa niini, nga mahimong lisud kaayo nga makuha kung wala’y husto nga kahanas ug sistema sa pag-log. Ang nag-unang tahas nga gitakda sa balangkas alang sa iyang kaugalingon mao ang pagminus sa mga duplicate nga mga parameter sa pag-configure sa pananglitan, sa ingon makunhuran ang posibilidad nga makadugang usa ka sayup.

Atong tan-awon ang usa ka pananglitan. Ingnon ta nga kami adunay usa ka yano nga aplikasyon nga adunay usa ka file sa pag-configure yaml. Mahimo kini nga bisan unsang microservice sa bisan unsang pinulongan. Atong tan-awon kon sa unsang paagi ang gambalay mahimong magamit niini nga serbisyo.

Apan una, alang sa mas dako nga kasayon, maghimo kita og walay sulod nga proyekto sa Idea IDE, human ma-install ang microconfig.io plugin niini:

Sayon nga pagdumala sa microservice configurations gamit ang microconfig.io

Gi-set up namo ang configuration sa paglansad sa plugin, mahimo nimong gamiton ang default configuration, sama sa screenshot sa ibabaw.

Ang among serbisyo gitawag nga order, unya sa usa ka bag-ong proyekto maghimo kami usa ka parehas nga istruktura:

Sayon nga pagdumala sa microservice configurations gamit ang microconfig.io

Ibutang ang configuration file sa folder nga adunay ngalan sa serbisyo - aplikasyon.yaml. Ang tanan nga microservices gilunsad sa usa ka matang sa palibot, mao nga, dugang pa sa paghimo sa usa ka config alang sa pag-alagad sa iyang kaugalingon, kini mao ang gikinahanglan nga sa paghulagway sa palibot sa iyang kaugalingon: alang niini nga kita sa paghimo sa usa ka folder. mga env ug idugang ang usa ka file niini nga adunay ngalan sa among palibot nga nagtrabaho. Sa ingon, ang balangkas maghimo mga file sa pag-configure alang sa mga serbisyo sa palibot dev, tungod kay kini nga parameter gibutang sa mga setting sa plugin.

Istruktura sa file dev.yaml kini mahimong yano:

mainorder:
    components:
         - order

Ang gambalay naglihok uban sa mga kumpigurasyon nga gigrupo. Para sa among serbisyo, pagpili og ngalan para sa grupo mainorder. Ang balangkas nakit-an ang matag usa sa ingon nga grupo sa mga aplikasyon sa file sa kalikopan ug nagmugna mga pag-configure alang sa tanan niini, nga nakit-an niini sa katugbang nga mga folder.

Sa file sa mga setting sa serbisyo mismo aron Atong ipiho ang usa lang ka parameter sa pagkakaron:

spring.application.name: order

Karon atong padaganon ang plugin, ug kini makamugna sa gikinahanglan nga configuration alang sa atong serbisyo sumala sa dalan nga gipiho sa mga kabtangan:

Sayon nga pagdumala sa microservice configurations gamit ang microconfig.io

mahimo lakaw ug walay pag-instalar og plugin, i-download lang ang framework distribution ug ipadagan kini gikan sa command line.
Kini nga solusyon angay alang sa paggamit sa usa ka build server.

Angay nga matikdan nga ang balangkas hingpit nga nakasabut kabtangan syntax, sa ato pa, ordinaryo nga mga file sa kabtangan nga mahimong magamit nga magkauban sa yaml mga configuration.

Dugangan ta ug laing serbisyo pagbayad ug komplikado ang anaa na.
Π’ aron:

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

Π’ pagbayad:

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

Ang nag-unang problema sa kini nga mga pag-configure mao ang presensya sa daghang kantidad sa kopya-paste sa mga setting sa serbisyo. Atong tan-awon kon sa unsang paagi ang gambalay makatabang sa pagtangtang niini. Magsugod kita sa labing klaro - ang presensya sa pagsumpo eureka sa paghulagway sa matag microservice. Maghimo kita og bag-ong direktoryo nga adunay mga setting nga file ug magdugang og bag-ong configuration niini:

Sayon nga pagdumala sa microservice configurations gamit ang microconfig.io

Ug karon atong idugang ang linya sa matag usa sa atong mga proyekto #apil ang eureka.

Awtomatikong makit-an sa framework ang configuration sa eureka ug kopyahon kini sa mga file sa configuration sa serbisyo, samtang ang usa ka separado nga configuration sa eureka dili pagabuhaton, tungod kay dili namo kini isulti sa environment file dev.yaml. Serbisyo aron:

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

Mahimo usab natong ibalhin ang mga setting sa database ngadto sa usa ka bulag nga configuration pinaagi sa pag-usab sa import line ngadto sa #ilakip ang eureka, orakulo.

Angay nga hinumdoman nga ang balangkas nagsubay sa matag pagbag-o kung gibag-o ang mga file sa pag-configure ug gibutang kini sa usa ka espesyal nga file sunod sa panguna nga file sa pag-configure. Ang entry sa log niini ingon niini: "Gitipigan 1 kabtangan nausab sa order/diff-application.yaml" Gitugotan ka niini nga dali nga makit-an ang mga pagbag-o sa dagkong mga file sa pag-configure.

Ang pagtangtang sa kasagarang mga bahin sa configuration nagtugot kanimo sa pagtangtang sa daghang wala kinahanglana nga copy-paste, apan dili motugot kanimo sa flexible nga paghimo og usa ka configuration alang sa lain-laing mga palibot - ang mga endpoint sa among mga serbisyo talagsaon ug hard-coded, kini dili maayo. Atong sulayan nga tangtangon kini.

Ang usa ka maayong solusyon mao ang pagpabilin sa tanan nga mga endpoint sa usa ka configuration nga mahimong i-refer sa uban. Alang niini nga katuyoan, ang suporta alang sa mga placeholder gipaila sa balangkas. Ingon niini ang pagbag-o sa file sa pag-configure eureka:

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

Karon tan-awon nato kung giunsa kini nga placeholder molihok. Ang sistema nakakaplag usa ka sangkap nga ginganlan katapusan nga mga punto ug mangita sa kahulogan niini eurekaip, ug dayon ilisan kini sa among configuration. Apan komosta ang lainlaing mga palibot? Aron mahimo kini, paghimo usa ka setting file sa katapusan nga mga punto ang mosunod nga tipo application.dev.yaml. Ang balangkas nga independente, pinasukad sa extension sa file, nagdesisyon kung unsang palibot kini nga pag-configure ug gikarga kini:

Sayon nga pagdumala sa microservice configurations gamit ang microconfig.io

Mga sulod sa Dev file:

eurekaip: 192.89.89.111
dbip: 192.168.0.100

Makahimo kami og parehas nga configuration alang sa mga pantalan sa among mga serbisyo:

server.port: ${ports@order}.

Ang tanan nga hinungdanon nga mga setting naa sa usa ka lugar, sa ingon makunhuran ang posibilidad sa mga sayup tungod sa nagkatibulaag nga mga parameter sa mga file sa pag-configure.

Naghatag ang balangkas og daghang andam nga mga placeholder, pananglitan, makuha nimo ang ngalan sa direktoryo diin nahimutang ang file sa pag-configure ug itudlo kini:

#include eureka, oracle
server.port: ${ports@order}
spring.application.name: ${this@name}

Salamat niini, dili kinahanglan nga dugang nga ipiho ang ngalan sa aplikasyon sa pag-configure ug mahimo usab kini ibutang sa usa ka sagad nga module, pananglitan, sa parehas nga eureka:

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

Ang configuration file aron mapakunhod ngadto sa usa ka linya:

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

Kung wala namo kinahanglana ang bisan unsa nga setting gikan sa parent configuration, mahimo namo kining i-specify sa among configuration ug i-apply kini atol sa generation. Kana mao, kung sa usa ka hinungdan kinahanglan namon ang usa ka talagsaon nga ngalan alang sa serbisyo sa pag-order, biyaan ra namon ang parameter spring.application.name.

Ingnon ta nga kinahanglan nimong idugang ang naandan nga mga setting sa pag-log sa serbisyo, nga gitipigan sa usa ka lahi nga file, pananglitan, logback.xml. Magbuhat ta og bulag nga grupo sa mga setting para niini:

Sayon nga pagdumala sa microservice configurations gamit ang microconfig.io

Sa batakang configuration, among isulti ang framework kung asa ibutang ang logging settings file nga among gikinahanglan gamit ang placeholder @ConfigDir:

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

Sa file logback.xml gi-configure namo ang mga standard nga mga appenders, nga mahimo usab nga adunay mga placeholder nga ang framework mausab sa panahon sa henerasyon sa mga config, pananglitan:

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

Pinaagi sa pagdugang sa import sa mga pag-configure sa serbisyo pag-logback, awtomatiko namong ma-configure ang pag-log alang sa matag serbisyo:

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

Panahon na aron masinati sa mas detalyado ang tanan nga magamit nga mga placeholder sa balangkas:

${kini@env} - mibalik sa ngalan sa kasamtangan nga palibot.
${…@ngalan} - mibalik sa ngalan sa component.
${…@configDir} β€” ibalik ang tibuuk nga agianan sa direktoryo sa config sa sangkap.
${…@resultDir} β€” ibalik ang tibuuk nga agianan sa direktoryo sa destinasyon sa sangkap (ang mga sangputanan nga mga file ibutang sa kini nga direktoryo).
${kini@configRoot} - ibalik ang tibuuk nga agianan sa direktoryo sa gamut sa tindahan sa pag-configure.

Gitugotan ka usab sa sistema nga makakuha mga variable sa palibot, pananglitan ang agianan sa java:
${env@JAVA_HOME}
Bisan pa, tungod kay ang balangkas nahisulat sa JAVA, makakuha kita og mga variable sa sistema nga susama sa tawag Sistema:: getProperty gamit ang istruktura nga sama niini:
${[protektado sa email]}
Angayan nga hisgutan ang suporta alang sa extension nga pinulongan Spring EL. Ang mosunod nga mga ekspresyon magamit sa configuration:

connection.timeoutInMs: #{5 * 60 * 1000}
datasource.maximum-pool-size: #{${[email protected]} + 10} 

ug mahimo nimong gamiton ang mga lokal nga variable sa mga file sa pag-configure gamit ang ekspresyon #var:

#var feedRoot: ${[email protected]}/feed
folder:
 root: ${this@feedRoot}
 success: ${this@feedRoot}/archive
 error: ${this@feedRoot}/error

Sa ingon, ang balangkas usa ka labi ka kusgan nga himan alang sa maayong pag-tune ug flexible nga pag-configure sa mga microservice. Ang balangkas hingpit nga nagtuman sa nag-unang tahas niini - pagwagtang sa copy-paste sa mga setting, pagkonsolida sa mga setting ug, isip resulta, pagpamenos sa posible nga mga sayup, samtang nagtugot kanimo nga dali nga makombinar ang mga configuration ug usbon kini alang sa lainlaing mga palibot.

Kung interesado ka sa kini nga balangkas, girekomenda ko ang pagbisita sa opisyal nga panid niini ug pamilyar sa hingpit dokumentasyon, o pagkalot sa mga tinubdan dinhi.

Source: www.habr.com

Idugang sa usa ka comment