Megosztás a következőn keresztül:


Üzenetsorok áttekintése

Ez a szakasz az üzenetsoros kommunikáció mögötti általános és alapvető fogalmakat mutatja be. A következő szakaszok részletesen ismertetik, hogyan jelennek meg az itt ismertetett üzenetsor-kezelési fogalmak a Windows Communication Foundationben (WCF).

Alapszintű üzenetsor-kezelési fogalmak

Elosztott alkalmazás tervezésekor fontos a szolgáltatások és ügyfelek közötti kommunikációhoz megfelelő átvitel kiválasztása. Számos tényező befolyásolja a használni kívánt szállítás típusát. Az egyik fontos tényező – a szolgáltatás, az ügyfél és az átvitel elkülönítése – meghatározza az üzenetsoros vagy közvetlen átvitel, például a TCP vagy a HTTP használatát. A közvetlen átvitelek, például a TCP és a HTTP jellegéből adódóan a kommunikáció teljesen leáll, ha a szolgáltatás vagy az ügyfél leáll, vagy ha a hálózat meghibásodik. A szolgáltatásnak, az ügyfélnek és a hálózatnak egyszerre kell futnia ahhoz, hogy az alkalmazás működjön. Az üzenetsoros átvitelek elkülönítést biztosítanak, ami azt jelenti, hogy ha a szolgáltatás vagy az ügyfél meghibásodik, vagy ha a közöttük lévő kommunikációs kapcsolatok meghiúsulnak, az ügyfél és a szolgáltatás továbbra is működhet.

Az üzenetsorok megbízható kommunikációt biztosítanak a kommunikáló felek vagy a hálózat meghibásodása esetén is. Az üzenetsorok rögzítik és kézbesítik a kommunikáló felek között kicserélt üzeneteket. Az üzenetsorok általában valamilyen tárolóval vannak alátámasztva, amelyek volatilisek vagy tartósak lehetnek. Az üzenetsorok egy szolgáltatás nevében tárolják az ügyféltől érkező üzeneteket, majd később továbbítják ezeket az üzeneteket a szolgáltatásnak. A közvetett üzenetsorok biztosítják a meghibásodások mindkét fél általi elkülönítését, így ez a magas rendelkezésre állású rendszerek és a leválasztott szolgáltatások előnyben részesített kommunikációs mechanizmusa. A közvetettség nagy késéssel jár. A késés az ügyfél üzenetküldése és a szolgáltatás fogadásának időpontja közötti késleltetés. Ez azt jelenti, hogy az üzenet elküldése után nem tudja, hogy mikor lehet feldolgozni az üzenetet. A legtöbb várólistán lévő alkalmazás nagy késéssel bír. Az alábbi ábra az üzenetsoros kommunikáció fogalmi modelljét mutatja be.

Model of queued communication

Üzenetsoros kommunikációs elméleti modell

A valóságban az üzenetsor egy elosztott fogalom. Ilyenek lehetnek helyiek bármelyik félnél, vagy távolról mindkét féltől. Az üzenetsor általában helyi a szolgáltatásban. Ebben a konfigurációban az ügyfél nem függhet attól, hogy a távoli üzenetsorhoz való csatlakozás folyamatosan elérhető legyen. Hasonlóképpen, az üzenetsornak elérhetőnek kell lennie attól függetlenül, hogy a szolgáltatás leolvasott-e az üzenetsorból. Az üzenetsor-kezelő az üzenetsorok gyűjteményét kezeli. Az üzenetsoroknak küldött üzenetek fogadásáért felelős más üzenetsor-kezelőktől. Emellett felelős a távoli üzenetsorokhoz való kapcsolódás kezeléséért és az üzeneteknek a távoli üzenetsorokra való átviteléért is. Annak érdekében, hogy az üzenetsorok rendelkezésre állása az ügyfél- vagy szolgáltatásalkalmazás-hibák ellenére is rendelkezésre álljon, a várólista-kezelő általában külső szolgáltatásként fut.

Amikor egy ügyfél üzenetet küld egy üzenetsorba, az a cél üzenetsorra továbbítja az üzenetet, amely a szolgáltatás üzenetsor-kezelője által kezelt üzenetsor. Az ügyfél üzenetsor-kezelője elküldi az üzenetet egy átviteli (vagy kimenő) üzenetsornak. Az átviteli üzenetsor egy üzenetsor az ügyfélsor-kezelőn, amely a célsorba való továbbításhoz tárolja az üzeneteket. A várólista-kezelő ezután megkeresi a célsort birtokban lévő üzenetsor-kezelő elérési útját, és átadja neki az üzenetet. A megbízható kommunikáció biztosítása érdekében a várólista-kezelők egy megbízható átviteli protokollt implementálnak az adatvesztés megelőzése érdekében. A célváradlista-kezelő fogadja a tulajdonában lévő és az üzeneteket tároló célsoroknak címzett üzeneteket. A szolgáltatás kéréseket küld a célsorból való olvasásra, és ekkor a várólista-kezelő kézbesíti az üzenetet a célalkalmazásnak. Az alábbi ábra a négy fél közötti kommunikációt mutatja be.

Queued Application Diagram

Üzenetsoros kommunikáció egy tipikus üzembe helyezési forgatókönyvben

Így a várólista-kezelő biztosítja a szükséges elkülönítést, hogy a feladó és a fogadó egymástól függetlenül meghiúsulhat a tényleges kommunikáció befolyásolása nélkül. Az üzenetsorok által biztosított extra közvetett forgalom révén több alkalmazáspéldány is beolvasható ugyanabból az üzenetsorból, így a csomópontok közötti gazdálkodás nagyobb átviteli sebességet érhet el. Ezért nem ritka, hogy az üzenetsorokat a nagyobb léptékű és átviteli sebességre vonatkozó követelmények eléréséhez használják.

Üzenetsorok és tranzakciók

A tranzakciók lehetővé teszik egy műveletcsoport csoportosítását, hogy ha egy művelet meghiúsul, az összes művelet meghiúsuljon. A tranzakciók használatának egyik példája, ha egy személy atm használatával 1000 usd-t utal át a megtakarítási fiókjából a számlájukra. Ez a következő műveleteket foglalja magában:

  • 1000 dollár kivonása a megtakarítási számláról.

  • 1000 dollár befizetése a számlára.

Ha az első művelet sikeres, és 1000 USD-t vonnak ki a megtakarítási számláról, de a második művelet meghiúsul, az 1000 usd elveszik, mert már kivonták a megtakarítási számláról. Ha a fiókokat érvényes állapotban szeretné tartani, ha egy művelet meghiúsul, mindkét műveletnek sikertelennek kell lennie.

Tranzakciós üzenetküldés esetén az üzenetek elküldhetők az üzenetsorba, és egy tranzakció alatt fogadhatók az üzenetsorból. Így ha egy tranzakcióban üzenetet küldenek, és a tranzakció visszagördül, akkor az eredmény olyan, mintha az üzenet soha nem lett volna elküldve az üzenetsorba. Hasonlóképpen, ha egy tranzakcióban üzenet érkezik, és a tranzakció visszagördül, akkor az eredmény olyan, mintha az üzenet soha nem lett volna megadva. Az üzenet az elolvasandó üzenetsorban marad.

A nagy késés miatt, amikor üzenetet küld, nem tudja, mennyi ideig tart elérni a célsort, és azt sem tudja, hogy mennyi ideig tart a szolgáltatás feldolgozni az üzenetet. Emiatt nem szeretne egyetlen tranzakciót használni az üzenet elküldéséhez, az üzenet fogadásához, majd az üzenet feldolgozásához. Ez egy olyan tranzakciót hoz létre, amelyet nem véglegesítettek határozatlan ideig. Amikor egy ügyfél és szolgáltatás egy tranzakcióval kommunikál egy üzenetsoron keresztül, két tranzakció történik: egy az ügyfélen és egy a szolgáltatáson. Az alábbi ábra a tranzakciós határokat mutatja be a tipikus üzenetsoros kommunikációban.

Queue with transactions

Üzenetsoros kommunikáció, amely külön tranzakciókat jelenít meg a rögzítéshez és a kézbesítéshez

Az ügyfél tranzakciója feldolgozza és elküldi az üzenetet. A tranzakció véglegesítésekor az üzenet az átviteli üzenetsorban van. A szolgáltatásban a tranzakció beolvassa az üzenetet a célsorból, feldolgozza az üzenetet, majd véglegesíti a tranzakciót. Ha a feldolgozás során hiba történik, az üzenet visszakerül a célsorba.

Aszinkron kommunikáció üzenetsorok használatával

Az üzenetsorok aszinkron kommunikációs módot biztosítanak. Azok az alkalmazások, amelyek üzenetsorokkal küldenek üzeneteket, nem tudják megvárni az üzenet fogadását és feldolgozását a fogadó számára, mert a várólista-kezelő által bevezetett nagy késés miatt. Az üzenetek sokkal hosszabb ideig maradhatnak az üzenetsorban, mint a kívánt alkalmazás. Ennek elkerülése érdekében az alkalmazás megadhat egy élettartamértéket az üzeneten. Ez az érték azt határozza meg, hogy az üzenet mennyi ideig maradjon az átviteli üzenetsorban. Ha túllépi ezt az időértéket, és az üzenet még mindig nem lett elküldve a célsorba, az üzenet továbbítható egy kézbesítetlen üzenetsorba.

Amikor a feladó üzenetet küld, a küldési műveletből származó visszatérés azt jelenti, hogy az üzenet csak a feladó átviteli üzenetsorába került. Ilyen esetben, ha hiba történik az üzenet célsorra való lekérésében, a küldő alkalmazás nem tud róla azonnal. Az ilyen hibák megjegyzéséhez a rendszer a sikertelen üzenetet egy kézbesítetlen üzenetsorba továbbítja.

Minden hibát, például egy üzenetet, amely nem éri el a célsort vagy az élettartam lejáratát, külön kell feldolgozni. Ezért nem ritka, hogy a várólistás alkalmazások két logikai csoportot írnak:

  • Az üzenetek küldésének és fogadásának normál ügyfél- és szolgáltatáslogika.

  • Kompenzációs logika a sikertelen átvitelből vagy kézbesítésből érkező üzenetek kezeléséhez.

A következő szakaszok ezeket a fogalmakat ismertetik.

Kézbesítetlen üzenetsor programozása

A kézbesítetlen levelek üzenetsorai olyan üzeneteket tartalmaznak, amelyek különböző okokból nem érik el a célsort. Az okok a lejárt üzenetektől a csatlakozási problémákig terjedhetnek, amelyek megakadályozzák az üzenet átvitelét a célsorba.

Az alkalmazások általában olvashatnak üzeneteket egy rendszerszintű üzenetsorból, megállapíthatják, hogy mi történt, és megfelelő műveletet hajthatnak végre, például kijavíthatják a hibákat, és újraküldhetik az üzenetet, vagy feljegyezhetik azt.

Méregüzenet-üzenetsor programozása

Miután egy üzenet elérte a célsort, előfordulhat, hogy a szolgáltatás ismételten nem dolgozza fel az üzenetet. Előfordulhat például, hogy egy alkalmazás, amely egy tranzakció során üzenetet olvas az üzenetsorból, és frissít egy adatbázist, előfordulhat, hogy az adatbázis átmenetileg megszakadt. Ebben az esetben a rendszer visszaállítja a tranzakciót, létrehoz egy új tranzakciót, és az üzenet újraolvasódik az üzenetsorból. Egy második kísérlet sikeres vagy sikertelen lehet. Bizonyos esetekben a hiba okától függően előfordulhat, hogy az üzenet ismételten meghiúsul az alkalmazásba való kézbesítés során. Ebben az esetben az üzenetet "méregnek" tekintik. Az ilyen üzenetek egy méreg-üzenetsorba kerülnek, amelyet egy méregkezelő alkalmazás képes elolvasni.

Lásd még