Tõlge
Sõnumivahetus on iga hajutatud süsteemi lahutamatu osa. See võimaldab tootjal saata sõnumi suvalisele arvule tarbijatele ning tarbija kohta ei ole vaja teada mingit teavet. See on suurepärane abi tõeliselt asünkroonseks ja lahutavaks suhtluseks.
Kui kasutad RabbitMQ-d, näitab ülalolev diagramm väga lihtsat, kuid tüüpilist struktuuri. Produtsent saadab lülitile sõnumi. Marsruutimisloogika kohaselt paneb lüliti sõnumi lülitiga seotud järjekorda. Täpsemalt, kui tegemist on ringhäälingutüüpi lülitiga, saadetakse selle sõnumi koopia korduvalt igale järjekorrale. Tarbija saab seejärel sõnumi vastu võtta ja töödelda.
Oluline eeldus, et ülaltoodud struktuur toimiks edukalt tootjate ja tarbijate jaoks, on see, et kõik RabbitMQ komponendid (st järjekorrad, lülitid ja sidumised) tuleb eelnevalt luua. Tarbija ei saa saata sõnumit lülitile. Kui lülitit ei eksisteeri, ei saa ta töötada sõnumeid järjekorrast, mida ei eksisteeri.
Seetõttu ei ole raske mõista, et enne kui tootja/tarbija sõnumi saadab/vastu võtab, lase tootja/tarbija väärtusel luua järjekorra, lüliti ja sidumissuhte. Vaatame mõlema viisi eeliseid ja puudusi.
1. Erista vastutusi
Pildi tõlge (1. Tootja loob lüliti 2. Tarbija loob järjekorra ja seob järjekorra lülitiga)
Selleks, et tootjad ja tarbijad saaksid täielikult lahkneda, teavad tootjad ideaalis ainult infot lüliti kohta (mitte järjekorda), ja tarbijad teavad ainult järjekorrast (mitte lülitist). Sidumissuhe näitab lüliti ja järjekorra vahelist seost
Üks võimalik viis on, et tootja tegeleb lüliti loomisega ning tarbija loob järjekorra ja seob selle lülitiga. Selle lahutamismeetodi eelis on see, et kui tarbijal on vaja järjekorda, on vaja lihtsalt luua järjekord ja siduda ta vastavalt nõudlusele, ning tootja ei pea teadma järjekorra kohta mingit infot. Kuid see ei ole piisav lahutamine: sest tarbija peab teadma lülitit, et seda siduda.
2. Produtsendid loovad kõik
Kui tootja töötab, saab selle seadistada looma kõik vajalikud komponendid (lülitid, järjekorrad ja sidumised). Selle lähenemise eeliseks on see, et sõnumeid ei kao (sest järjekord on juba loodud ja seotud lülitiga ning ükski tarbija ei pea seda enne käivitama).
See tähendab siiski, et tootja peab teadma kõiki järjekordi, mis tuleb lülitiga siduda. See on tugevalt seotud viis. Põhjus on selles, et iga kord, kui uut järjekorda tuleb lisada, peab tootja ümber seadistama ja juurutama, et luua ja siduda järjekorrad
3. Tarbijad loovad kõik
Vastupidine on lasta tarbijal luua lülitid, järjekorrad ja sidemed, mida ta vajab, kui seade töötab. Nagu eelnevas lähenemises, tekitab see meetod sidumise, kuna tarbija peab teadma infot lüliti kohta, millega ta on järjekorraga seotud. Igasugused muudatused lülitis (näiteks ümbernimetamine) tähendavad, et kõik tarbijad tuleb ümber seadistada ja juurutada. Kui järjekorrad ja tarbijad on suured, võib see keerukus olla liiga keeruline.
4. Kumbki ei loo midagi
Täiesti teine lähenemine on see, et tootja ega tarbija ei tooda vajalikke komponente. Selle asemel luuakse see eelnevalt administraatori plugina või administraatori CLI kasutajaliidese abil. See meetod põhineb järgmistel eelistel:
- Tootjad ja tarbijad võivad olla täielikult lahutatud. Tootjad tunnevad ainult vahetust ja tarbijad ainult järjekorda.
- Seda saab hõlpsasti skriptida ja automatiseerida juurutusprotsessi osana
- Kõik muudatused, nagu uued järjekorrad, saab lisada ilma olemasolevaid, kasutusel olevaid väljaandjaid ja tarbijaid puudutamata
Kokkuvõte
Hajutatud süsteemides on asünkroonsed sõnumid kasulik viis lahutada, kuid nende lahutamiseks on vajalik hoida tõhusat strateegiat aluseks oleva sõnumistruktuuri säilitamiseks (RabbitMQ-s on need järjekorrad, lülitid ja sidumised).
Kuigi kirjastajad ja tarbijateenused võivad ise vastutada vajaliku loomise eest, võivad need olla kulukad esialgse sõnumikadumise, sidumise ja operatiivse hoolduse (konfiguratsiooni ja juurutamise osas) osas.
Tõenäoliselt parim viis sõnumisüsteemi konfiguratsiooni käsitlemiseks seal, kus see kuulub: kirjutada skripte väljaspool rakendust. See tagab, et teenused jäävad lahutatuks ning järjekorrasüsteem saab vajadusel dünaamiliselt muutuda, mõjutamata suurt hulka olemasolevaid teenuseid.
Originaal:Hüperlingi sisselogimine on nähtav. Originaalne inglise keel:Hüperlingi sisselogimine on nähtav.
|