==== Üzenet kezelő rendszerek (message-oriented middleware) ==== Az üzenetkezelő rendszerek működésének részleteit az AMQP szabványban részletesen olvashatjuk: https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf Az **AMQP** (Advanced Message Queuing Protocol) az üzenetkezelő rendszerek (message-oriented middleware) egyik szabványa, amely lehetővé teszi a szoftverkomponensek közötti hatékony kommunikációt. Az AMQP protokoll számos implementációja létezik, amelyek ugyanazt az alapvető //Advanced Message Queuing Model//-t (AMQ modell) modellt használják. Az **AMQ** modell a következő főbb elemekből áll: * Üzenet (Message): Az AMQP modellben az üzenet az adat, amelyet az alkalmazások között továbbítunk. * Küldő (Publisher): A komponens, ami az üzenetet kibocsátja a hálózaton keresztül. * Címzett/fogyasztó (Consumer): Az a komponens, amely az üzenetet fogadja. **Üzenetközvetítő (Message Broker)**: Az üzenetközvetítő a AMQ modell központi, amely fogadja az üzeneteket a Küldőktől, majd továbbítja őket a megfelelő címzetthez. Az **AMQ** modell két további fontos eleme a címzési modell és az üzenetformátum. Az AMQ modell használ egy publikáló-feliratkozó (publish-subscribe) címzési modellt, amely lehetővé teszi az üzenetek széles körű elosztását a Címzettek között. Az üzenetek formátumát általában a JSON, XML, vagy az AMQP saját bináris formátumában adják meg. Az **AMQ** modell egy nagyon hatékony és rugalmas modell, amely a hatékony üzenetkommunikáció mellett a //skálázhatóságot// és a //kézbesítés megbízhatóságát// is támogatja. Az AMQ modell több szabványosított funkcióval is rendelkezik, például a biztonsági mechanizmusokkal, a //tranzakciókezeléssel// és //egyszeri kézbesítési lehetőséggel//. ===== Hasonlóság az email kezeléssel ===== * az //üzenetsor// olyan, mint egy //levelesláda// * a fogyasztó vagy címzett megfelel a email kliensnek * az "Exchange" olyan szerepet tölt be, mint a MTA (mail transfer agent), ami megvizsgálja a leveleket és a tartalmuk alapján dönt a továbbításról egy beépített szabálybázis felhasználásával. * a //routing key// - útvonalválasztó kulcs, olyan mint a To: Cc: vagy Bcc címek * a //binding// az MTA útvonalválasztó táblájának felel meg logikailag Az AMPQ implementáció, üzenetsorokat, exchange-eket, bindig-eket futási időben létrehozzák és módosíthatóvá is teszik. ===== Üzenetek életciklusa ===== Az AMQP üzenetek életciklusa az üzenet küldője (Publisher) és az üzenet címzettje (Consumer) közötti kommunikáció során több fázisra osztható. Az alábbiakban nézzük meg az AMQP üzenetek életciklusának fontosabb fázisait: * Kiadás (Publishing): Az üzenet küldője (Publisher) létrehozza az üzenetet és továbbítja azt a címezhető objektumokhoz (Exchange), amelyek felelősek az üzenet továbbításáért az üzenetsorokba (Queue). Egyszerűbb esetekben közvetlenül az üzenetsorok is megcímezhetők. * Továbbítás (Routing): Az Exchange az üzenet címzettjei (Consumers) által megadott szempontok (kulcsok) alapján továbbítja az üzeneteket az egyes üzenetsorokba. * Tárolás (Storing): Az üzenetek tárolásra kerülnek az üzenetsorokban, amíg a címzett el nem éri azokat. * Fogyasztás (Consuming): Az üzenet címzettje (Consumer) eléri az üzenetet a megfelelő sorból, és feldolgozza azt. * Visszaigazolás (Acknowledgment): A Consumer visszaigazolja az üzenet feldolgozását, hogy az Exchange tudja, hogy az üzenet sikeresen átment a Consumerhez. * Törlés (Deletion): Az üzenetet törlik az üzenetsorból, hogy ne kerüljön újra feldolgozásra. Az AMQP üzenetek életciklusa biztosítja az üzenetek megbízható továbbítását az alkalmazások között, valamint lehetővé teszi a szigorú szabályok alapján történő üzenetkezelést, például az üzenetek visszautasítását, az üzenetek késleltetését és az üzenetek újraküldését, ha azok nem érnek célba az első próbálkozásra. Un. 'halott levél' csatornát (DLQ/DLX) is létre lehet hozni, amibe automatikusan belekerülnek a kézbesítetlen vagy visszautasított üzenetek.