====== RabbitMQ ====== **RabbitMQ** je softwarový prostředník pro zasílání zpráv (Message Broker). Jeho hlavním úkolem je přijímat zprávy od jedné aplikace (**Producer**) a doručovat je dalším aplikacím (**Consumer**). Funguje jako "poštovní schránka": když aplikace odešle zprávu, RabbitMQ ji bezpečně uloží do fronty a zajistí její doručení, i když je cílová aplikace momentálně zaneprázdněná nebo offline. ===== Základní architektura ===== RabbitMQ využívá protokol **AMQP** (Advanced Message Queuing Protocol). Komunikace probíhá přes tyto klíčové prvky: * **Producer:** Aplikace, která zprávy odesílá. * **Exchange:** "Ústředna", která přijímá zprávy od Producera a podle pravidel (**Routing Keys**) je směruje do správných front. * **Queue (Fronta):** Vyrovnávací paměť, kde zprávy čekají, dokud si je nevyzvedne příjemce. * **Consumer:** Aplikace, která zprávy zpracovává. ===== Typy směrování (Exchange Types) ===== RabbitMQ je unikátní svou flexibilitou v tom, jak zprávy rozděluje: * **Direct:** Zpráva jde přesně do té fronty, která má odpovídající směrovací klíč. * **Fanout:** Zpráva je zkopírována do všech front, které jsou k exchange připojeny (vhodné pro oznámení/broadcast). * **Topic:** Zprávy jsou směrovány na základě vzorů (např. klíč `stock.usd.*` doručí zprávy do front sledujících akcie v dolarech). * **Headers:** Směrování probíhá na základě atributů v hlavičce zprávy. ===== Hlavní výhody použití ===== * **Asynchronní zpracování:** Aplikace nemusí čekat na dokončení úkolu. Webový server může okamžitě odpovědět uživateli a náročný úkol (např. generování PDF) nechat "na později" na pozadí. * **Škálovatelnost:** Pokud fronta roste příliš rychle, stačí přidat další Consumery (pracovníky), kteří budou zprávy zpracovávat paralelně. * **Odolnost (Durability):** RabbitMQ umí zprávy ukládat na disk. Pokud server spadne, po restartu zprávy ve frontě stále zůstanou. * **Oddělení systémů (Decoupling):** Aplikace o sobě nemusí vědět. Stačí, když obě umí komunikovat s RabbitMQ. ===== Srovnání: RabbitMQ vs. Apache Kafka ===== ^ Vlastnost ^ RabbitMQ ^ Apache Kafka ^ | **Typ** | Tradiční Message Broker. | Distribuovaná streaming platforma. | | **Způsob práce** | Zpráva se po doručení a potvrzení smaže. | Zprávy zůstávají uloženy (log) a lze je číst opakovaně. | | **Priorita** | Bohaté možnosti směrování a prioritizace. | Extrémní propustnost dat a historická analýza. | | **Použití** | Komplexní business logika, e-commerce, úkoly na pozadí. | Big Data, real-time analytika, sledování kliknutí (telemetrie). | ===== Příklady z praxe ===== - **E-shopy:** Po kliknutí na "Koupit" se do RabbitMQ pošle zpráva. Jeden Consumer pošle potvrzovací e-mail, druhý zarezervuje zboží ve skladu a třetí připraví podklady pro dopravce. - **Microservices:** Komunikace mezi desítkami malých služeb, které se navzájem neblokují. > **Poznámka pro vývojáře:** RabbitMQ je napsán v jazyce **Erlang**, což mu propůjčuje neuvěřitelnou stabilitu a schopnost zvládat tisíce souběžných spojení s minimální režií. --- **Viz také:** [[microservices|Mikroslužby]], [[amqp|AMQP]], [[apache-kafka|Apache Kafka]], [[asynchronni-zpracovani|Asynchronní zpracování]]