ක්ෂුද්ර සේවා සංවර්ධනය හා පසුව ක්රියාත්මක කිරීමේදී ඇති එක් ප්රධාන ගැටළුවක් වන්නේ ඒවායේ අවස්ථා වල නිපුණ සහ නිවැරදි වින්යාසයයි. මගේ මතය අනුව, නව රාමුවක් මේ සඳහා උපකාර කළ හැකිය
ඔබට බොහෝ ක්ෂුද්ර සේවා තිබේ නම්, ඒ සෑම එකක්ම තමන්ගේම වින්යාස ගොනුව / ගොනු සමඟ පැමිණේ නම්, ඒවායින් එකක දෝෂයක් ඇතිවීමේ ඉහළ සම්භාවිතාවක් ඇත, නිසි කුසලතා සහ ලොග් කිරීමේ පද්ධතියක් නොමැතිව අල්ලා ගැනීම ඉතා අපහසු විය හැකිය. රාමුව විසින්ම සකසා ගන්නා ප්රධාන කාර්යය වන්නේ අනුපිටපත් අවස්ථා වින්යාස පරාමිතීන් අවම කිරීම, එමඟින් දෝෂයක් එක් කිරීමේ සම්භාවිතාව අඩු කිරීමයි.
අපි උදාහරණයක් බලමු. අපි හිතමු අපිට වින්යාස ගොනුවක් සහිත සරල යෙදුමක් තියෙනවා කියලා යමහල්. මෙය ඕනෑම භාෂාවකින් ඕනෑම ක්ෂුද්ර සේවාවක් විය හැක. මෙම සේවාව සඳහා රාමුව යෙදිය හැකි ආකාරය බලමු.
නමුත් පළමුව, වැඩි පහසුව සඳහා, එහි ඇති microconfig.io ප්ලගිනය ස්ථාපනය කිරීමෙන් පසුව, Idea IDE හි හිස් ව්යාපෘතියක් නිර්මාණය කරමු:
අපි ප්ලගින දියත් කිරීමේ වින්යාසය සකසන්නෙමු, ඉහත තිර පිටුවේ මෙන් ඔබට පෙරනිමි වින්යාසය භාවිතා කළ හැකිය.
අපගේ සේවාව ඇණවුම ලෙස හැඳින්වේ, පසුව නව ව්යාපෘතියකදී අපි සමාන ව්යුහයක් නිර්මාණය කරමු:
සේවා නාමය සහිත ෆෝල්ඩරයේ වින්යාස ගොනුව තබන්න - application.yaml. සියලුම ක්ෂුද්ර සේවා යම් ආකාරයක පරිසරයක දියත් කර ඇත, එබැවින්, සේවාව සඳහාම වින්යාසයක් නිර්මාණය කිරීමට අමතරව, පරිසරයම විස්තර කිරීම අවශ්ය වේ: මේ සඳහා අපි ෆෝල්ඩරයක් සාදන්නෙමු. 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
මෙම වින්යාසයන් සමඟ ඇති ප්රධාන ගැටළුව වන්නේ සේවා සැකසුම් තුළ විශාල පිටපත් පේස්ට් තිබීමයි. රාමුව එය ඉවත් කිරීමට උපකාරී වන්නේ කෙසේදැයි බලමු. අපි වඩාත් පැහැදිලිව ආරම්භ කරමු - වින්යාසය තිබීම යුරේකා එක් එක් ක්ෂුද්ර සේවා විස්තරය තුළ. අපි සැකසුම් ගොනුව සමඟ නව නාමාවලියක් සාදා එයට නව වින්යාසයක් එක් කරමු:
දැන් අපි අපේ එක් එක් ව්යාපෘතියට රේඛාව එකතු කරමු #යුරේකා ඇතුලත්.
රාමුව ස්වයංක්රීයව යුරේකා වින්යාසය සොයාගෙන එය සේවා වින්යාස ගොනු වෙත පිටපත් කරනු ඇත, වෙනම යුරේකා වින්යාසයක් සාදනු නොලැබේ, මන්ද අපි එය පරිසර ගොනුවේ සඳහන් නොකරනු ඇත. dev.yaml. සේවය නියෝග:
#include eureka
server.port: 9999
spring.application.name: order
db.url: 192.168.0.100
ආනයන රේඛාව වෙනස් කිරීමෙන් අපට දත්ත සමුදා සැකසුම් වෙනම වින්යාසයකට ගෙන යා හැකිය #යුරේකා, ඔරකල් ඇතුළත්.
වින්යාස ගොනු ප්රතිජනනය කිරීමේදී රාමුව එක් එක් වෙනස්කම නිරීක්ෂණය කරන අතර එය ප්රධාන වින්යාස ගොනුව අසල විශේෂ ගොනුවක තබන බව සඳහන් කිරීම වටී. එහි ලොගයේ ඇතුළත් කිරීම මේ ආකාරයෙන් පෙනේ: "ගබඩා 1 දේපල වෙනස් වේ order/diff-application.yaml" විශාල වින්යාස ගොනු වල වෙනස්කම් ඉක්මනින් හඳුනා ගැනීමට මෙය ඔබට ඉඩ සලසයි.
වින්යාසයේ පොදු කොටස් ඉවත් කිරීමෙන් ඔබට අනවශ්ය පිටපත්-පේස්ට් වලින් මිදීමට ඉඩ සලසයි, නමුත් විවිධ පරිසරයන් සඳහා නම්යශීලීව වින්යාසයක් නිර්මාණය කිරීමට ඔබට ඉඩ නොදේ - අපගේ සේවාවන්හි අවසාන ලක්ෂ්ය අද්විතීය සහ දෘඪ-කේත කර ඇත, මෙය නරක ය. අපි මෙය ඉවත් කිරීමට උත්සාහ කරමු.
හොඳ විසඳුමක් වනුයේ අනෙක් අයට යොමු කළ හැකි එක් වින්යාසයක් තුළ සියලුම අන්ත ලක්ෂ්ය තබා ගැනීමයි. මෙම කාර්යය සඳහා, ස්ථාන දරන්නන් සඳහා සහය රාමුව තුළට හඳුන්වා දී ඇත. වින්යාස ගොනුව වෙනස් වන්නේ එලෙස ය යුරේකා:
client:
serviceUrl:
defaultZone: http://${endpoints@eurekaip}:6782/eureka/
දැන් අපි බලමු කොහොමද මේ placeholder එක වැඩ කරන්නේ කියලා. පද්ධතිය නමින් සංරචකයක් සොයා ගනී අන්ත ලක්ෂ්ය සහ එහි අර්ථය සොයයි යුරේකායිප්, ඉන්පසු එය අපගේ වින්යාසයට ආදේශ කරයි. නමුත් විවිධ පරිසරයන් ගැන කුමක් කිව හැකිද? මෙය සිදු කිරීම සඳහා, සැකසුම් ගොනුවක් සාදන්න අන්ත ලක්ෂ්ය පහත වර්ගය 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}
අපට මව් වින්යාසයෙන් කිසිදු සැකසුමක් අවශ්ය නැතිනම්, අපට එය අපගේ වින්යාසය තුළ සඳහන් කළ හැකි අතර එය උත්පාදනය අතරතුර යෙදේ. එනම්, කිසියම් හේතුවක් නිසා අපට ඇණවුම් සේවාව සඳහා අද්විතීය නමක් අවශ්ය නම්, අපි පරාමිතිය අතහැර දමමු වසන්තය.application.නම.
වෙනම ගොනුවක ගබඩා කර ඇති සේවාවට අභිරුචි ලොග් සැකසුම් එකතු කිරීමට ඔබට අවශ්ය යැයි සිතමු, උදාහරණයක් ලෙස, 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} - වත්මන් පරිසරයේ නම ආපසු ලබා දෙයි.
${…@name} - සංරචකයේ නම ආපසු ලබා දෙයි.
${…@configDir} — සංරචකයේ වින්යාස නාමාවලිය වෙත සම්පූර්ණ මාර්ගය ආපසු ලබා දෙයි.
${…@resultDir} — සංරචකයේ ගමනාන්ත නාමාවලිය වෙත සම්පූර්ණ මාර්ගය ආපසු ලබා දෙයි (ප්රතිඵලයක් ලෙස ලැබෙන ගොනු මෙම නාමාවලියෙහි තබනු ඇත).
${this@configRoot} - වින්යාස ගබඩාවේ මූල නාමාවලිය වෙත සම්පූර්ණ මාර්ගය ආපසු ලබා දෙයි.
පරිසරය විචල්යයන් ලබා ගැනීමට පද්ධතිය ඔබට ඉඩ සලසයි, උදාහරණයක් ලෙස java වෙත යන මාර්ගය:
${env@JAVA_HOME}
එක්කෝ, රාමුව ලියා ඇති නිසා JAVA, අපිට Call එකට සමාන system variables ගන්න පුලුවන් පද්ධතිය ::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
මේ අනුව, රාමුව ක්ෂුද්ර සේවාවල සියුම් සුසර කිරීම සහ නම්යශීලී වින්යාස කිරීම සඳහා තරමක් බලවත් මෙවලමකි. රාමුව එහි ප්රධාන කර්තව්යය මනාව ඉටු කරයි - සැකසුම් වල පිටපත් ඇලවීම ඉවත් කිරීම, සැකසුම් ඒකාබද්ධ කිරීම සහ එහි ප්රති result ලයක් ලෙස සිදුවිය හැකි දෝෂ අවම කිරීම, ඔබට පහසුවෙන් වින්යාසයන් ඒකාබද්ධ කිරීමට සහ විවිධ පරිසරයන් සඳහා ඒවා වෙනස් කිරීමට ඉඩ සලසයි.
ඔබ මෙම රාමුව ගැන උනන්දුවක් දක්වන්නේ නම්, එහි නිල පිටුවට ගොස් සම්පූර්ණයෙන් දැන හඳුනා ගැනීමට මම නිර්දේශ කරමි
මූලාශ්රය: www.habr.com