మైక్రోసర్వీస్ల అభివృద్ధి మరియు తదుపరి ఆపరేషన్లో ప్రధాన సమస్యలలో ఒకటి వాటి ఉదాహరణల యొక్క సమర్థవంతమైన మరియు ఖచ్చితమైన కాన్ఫిగరేషన్. నా అభిప్రాయం ప్రకారం, కొత్త ఫ్రేమ్వర్క్ దీనికి సహాయపడుతుంది
మీరు అనేక మైక్రోసర్వీస్లను కలిగి ఉంటే, మరియు వాటిలో ప్రతి ఒక్కటి దాని స్వంత కాన్ఫిగరేషన్ ఫైల్/ఫైళ్లతో వచ్చినట్లయితే, వాటిలో ఒకదానిలో లోపం సంభవించే అధిక సంభావ్యత ఉంది, సరైన నైపుణ్యం మరియు లాగింగ్ సిస్టమ్ లేకుండా పట్టుకోవడం చాలా కష్టం. డూప్లికేట్ ఇన్స్టాన్స్ కాన్ఫిగరేషన్ పారామితులను తగ్గించడం, తద్వారా లోపాన్ని జోడించే సంభావ్యతను తగ్గించడం ఫ్రేమ్వర్క్ తనకు తానుగా సెట్ చేసుకునే ప్రధాన పని.
ఒక ఉదాహరణ చూద్దాం. మనకు కాన్ఫిగరేషన్ ఫైల్తో కూడిన సాధారణ అప్లికేషన్ ఉందని చెప్పండి యమల్. ఇది ఏ భాషలోనైనా మైక్రోసర్వీస్ కావచ్చు. ఈ సేవకు ఫ్రేమ్వర్క్ ఎలా వర్తించవచ్చో చూద్దాం.
అయితే ముందుగా, ఎక్కువ సౌలభ్యం కోసం, అందులో microconfig.io ప్లగ్ఇన్ని ఇన్స్టాల్ చేసిన తర్వాత, Idea IDEలో ఖాళీ ప్రాజెక్ట్ని క్రియేట్ చేద్దాం:
మేము ప్లగిన్ లాంచ్ కాన్ఫిగరేషన్ని సెటప్ చేసాము, మీరు పైన ఉన్న స్క్రీన్షాట్లో వలె డిఫాల్ట్ కాన్ఫిగరేషన్ను ఉపయోగించవచ్చు.
మా సేవను ఆర్డర్ అంటారు, ఆపై కొత్త ప్రాజెక్ట్లో మేము ఇలాంటి నిర్మాణాన్ని సృష్టిస్తాము:
సేవా పేరుతో ఫోల్డర్లో కాన్ఫిగరేషన్ ఫైల్ను ఉంచండి - అప్లికేషన్.యామల్. అన్ని మైక్రోసర్వీస్లు ఒక రకమైన వాతావరణంలో ప్రారంభించబడ్డాయి, కాబట్టి, సేవ కోసం కాన్ఫిగరేషన్ను సృష్టించడంతో పాటు, పర్యావరణాన్ని కూడా వివరించడం అవసరం: దీని కోసం మేము ఫోల్డర్ను సృష్టిస్తాము. envs మరియు దానికి మా పని వాతావరణం పేరుతో ఒక ఫైల్ను జోడించండి. అందువలన, ఫ్రేమ్వర్క్ వాతావరణంలో సేవల కోసం కాన్ఫిగరేషన్ ఫైల్లను సృష్టిస్తుంది dev, ఈ పరామితి ప్లగ్ఇన్ సెట్టింగ్లలో సెట్ చేయబడినందున.
ఫైల్ నిర్మాణం dev.yaml ఇది చాలా సరళంగా ఉంటుంది:
mainorder:
components:
- order
ఫ్రేమ్వర్క్ కలిసి సమూహం చేయబడిన కాన్ఫిగరేషన్లతో పనిచేస్తుంది. మా సేవ కోసం, సమూహం కోసం ఒక పేరును ఎంచుకోండి ప్రధాన క్రమం. ఫ్రేమ్వర్క్ పర్యావరణ ఫైల్లో అటువంటి ప్రతి అప్లికేషన్ల సమూహాన్ని కనుగొంటుంది మరియు వాటన్నింటికీ కాన్ఫిగరేషన్లను సృష్టిస్తుంది, ఇది సంబంధిత ఫోల్డర్లలో కనుగొనబడుతుంది.
సేవా సెట్టింగ్ల ఫైల్లోనే ఆర్డర్ ప్రస్తుతానికి ఒక పరామితిని మాత్రమే నిర్దేశిద్దాం:
spring.application.name: 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.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 ప్రతి మైక్రోసర్వీస్ యొక్క వివరణలో. సెట్టింగ్ల ఫైల్తో కొత్త డైరెక్టరీని క్రియేట్ చేద్దాం మరియు దానికి కొత్త కాన్ఫిగరేషన్ని జోడిద్దాం:
మరియు ఇప్పుడు మన ప్రతి ప్రాజెక్ట్కి లైన్ను జోడిద్దాం #యురేకాను చేర్చండి.
ఫ్రేమ్వర్క్ స్వయంచాలకంగా యురేకా కాన్ఫిగరేషన్ను కనుగొంటుంది మరియు దానిని సేవా కాన్ఫిగరేషన్ ఫైల్లకు కాపీ చేస్తుంది, అయితే ప్రత్యేక యురేకా కాన్ఫిగరేషన్ సృష్టించబడదు, ఎందుకంటే మేము దానిని పర్యావరణ ఫైల్లో పేర్కొనము. dev.yaml. సేవ ఆర్డర్:
#include eureka
server.port: 9999
spring.application.name: order
db.url: 192.168.0.100
దిగుమతి లైన్ను మార్చడం ద్వారా మేము డేటాబేస్ సెట్టింగ్లను ప్రత్యేక కాన్ఫిగరేషన్లోకి కూడా తరలించవచ్చు #యురేకా, ఒరాకిల్ చేర్చండి.
కాన్ఫిగరేషన్ ఫైల్లను పునరుత్పత్తి చేసేటప్పుడు ఫ్రేమ్వర్క్ ప్రతి మార్పును ట్రాక్ చేస్తుంది మరియు దానిని ప్రధాన కాన్ఫిగరేషన్ ఫైల్ పక్కన ప్రత్యేక ఫైల్లో ఉంచడం గమనించదగినది. దాని లాగ్లోని నమోదు ఇలా కనిపిస్తుంది: “1 ప్రాపర్టీకి మార్చబడింది ఆర్డర్/diff-application.yaml" ఇది పెద్ద కాన్ఫిగరేషన్ ఫైల్లకు మార్పులను త్వరగా గుర్తించడానికి మిమ్మల్ని అనుమతిస్తుంది.
కాన్ఫిగరేషన్లోని సాధారణ భాగాలను తీసివేయడం వలన మీరు చాలా అనవసరమైన కాపీ-పేస్ట్లను వదిలించుకోవడానికి అనుమతిస్తుంది, కానీ వివిధ వాతావరణాల కోసం కాన్ఫిగరేషన్ను సరళంగా సృష్టించడానికి మిమ్మల్ని అనుమతించదు - మా సేవల ముగింపు పాయింట్లు ప్రత్యేకమైనవి మరియు హార్డ్-కోడెడ్, ఇది చెడ్డది. దీన్ని తొలగించడానికి ప్రయత్నిద్దాం.
అన్ని ఎండ్పాయింట్లను ఇతరులు సూచించగల ఒకే కాన్ఫిగరేషన్లో ఉంచడం మంచి పరిష్కారం. ఈ ప్రయోజనం కోసం, ఫ్రేమ్వర్క్లో ప్లేస్హోల్డర్లకు మద్దతు ప్రవేశపెట్టబడింది. ఈ విధంగా కాన్ఫిగరేషన్ ఫైల్ మారుతుంది EUREKA:
client:
serviceUrl:
defaultZone: http://${endpoints@eurekaip}:6782/eureka/
ఇప్పుడు ఈ ప్లేస్హోల్డర్ ఎలా పనిచేస్తుందో చూద్దాం. సిస్టమ్ పేరుతో ఒక భాగాన్ని కనుగొంటుంది అంత్య బిందువుల మరియు దానిలో అర్థం కోసం చూస్తుంది యురేకైప్, ఆపై దానిని మా కాన్ఫిగరేషన్లో భర్తీ చేస్తుంది. కానీ వివిధ వాతావరణాల గురించి ఏమిటి? దీన్ని చేయడానికి, సెట్టింగుల ఫైల్ను సృష్టించండి అంత్య బిందువుల క్రింది రకం application.dev.yaml. ఫ్రేమ్వర్క్ స్వతంత్రంగా, ఫైల్ పొడిగింపు ఆధారంగా, ఈ కాన్ఫిగరేషన్ ఏ పర్యావరణానికి చెందినదో నిర్ణయిస్తుంది మరియు దానిని లోడ్ చేస్తుంది:
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. దాని కోసం ప్రత్యేక సెట్టింగుల సమూహాన్ని క్రియేట్ చేద్దాం:
ప్రాథమిక కాన్ఫిగరేషన్లో, ప్లేస్హోల్డర్ని ఉపయోగించి మనకు అవసరమైన లాగింగ్ సెట్టింగ్ల ఫైల్ను ఎక్కడ ఉంచాలో ఫ్రేమ్వర్క్కు తెలియజేస్తాము @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} - ప్రస్తుత పర్యావరణం పేరును అందిస్తుంది.
${…@పేరు} - భాగం యొక్క పేరును అందిస్తుంది.
${…@configDir} — భాగం యొక్క కాన్ఫిగరేషన్ డైరెక్టరీకి పూర్తి మార్గాన్ని అందిస్తుంది.
${…@resultDir} — కాంపోనెంట్ యొక్క డెస్టినేషన్ డైరెక్టరీకి పూర్తి మార్గాన్ని అందిస్తుంది (ఫలితంగా ఫైల్లు ఈ డైరెక్టరీలో ఉంచబడతాయి).
${this@configRoot} — కాన్ఫిగరేషన్ స్టోర్ యొక్క రూట్ డైరెక్టరీకి పూర్తి మార్గాన్ని అందిస్తుంది.
సిస్టమ్ మిమ్మల్ని ఎన్విరాన్మెంట్ వేరియబుల్స్ని పొందడానికి కూడా అనుమతిస్తుంది, ఉదాహరణకు జావాకు మార్గం:
${env@JAVA_HOME}
గాని, ఫ్రేమ్వర్క్ వ్రాయబడినందున JAVA, మేము కాల్కు సమానమైన సిస్టమ్ వేరియబుల్లను పొందవచ్చు సిస్టమ్::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