====== AMQP (Advanced Message Queuing Protocol) ====== **AMQP** je otevřený internetový protokol aplikační vrstvy určený pro asynchronní zasílání zpráv. Na rozdíl od HTTP, které je primárně typu požadavek-odpověď, AMQP se zaměřuje na spolehlivé doručení zpráv, jejich řazení do front a zajištění bezpečnosti. Nejznámější implementací tohoto protokolu je **[[rabbitmq|RabbitMQ]]**. ===== Klíčové vlastnosti ===== * **Interoperabilita:** Umožňuje vzájemnou komunikaci systémů napsaných v různých programovacích jazycích. * **Spolehlivost:** Podporuje potvrzování zpráv (Acknowledgements). Pokud příjemce zprávu nepotvrdí (např. kvůli pádu aplikace), AMQP zajistí její opětovné doručení. * **Bezpečnost:** Protokol podporuje autentizaci (SASL) a šifrování (TLS). * **Flexibilní směrování:** Umožňuje složité scénáře distribuce zpráv (point-to-point, publish-subscribe). ===== Model AMQP (Entity) ===== AMQP definuje tři základní komponenty, které zajišťují cestu zprávy od odesílatele k příjemci: ==== 1. Exchange (Ústředna) ==== Místo, kam odesílatel (**Producer**) posílá své zprávy. Exchange zprávu přijme a na základě definovaných pravidel (**Bindings**) ji pošle do jedné nebo více front. ==== 2. Queue (Fronta) ==== Úložiště, kde zprávy čekají, dokud si je nevyzvedne příjemce (**Consumer**). Fronta může být dočasná nebo perzistentní (zůstane i po restartu serveru). ==== 3. Binding (Vazba) ==== Pravidlo, které říká: „Zprávy z této ústředny s tímto klíčem patří do této konkrétní fronty.“ ===== Verze protokolu: 0-9-1 vs. 1.0 ===== V praxi se nejčastěji setkáte se dvěma verzemi, které jsou technicky velmi odlišné: ^ Verze ^ Charakteristika ^ | **AMQP 0-9-1** | Používá ji RabbitMQ. Definuje přesnou architekturu (Exchanges, Queues). Je velmi populární pro svou jednoduchost a bohaté funkce směrování. | | **AMQP 1.0** | ISO standard (používají např. Azure Service Bus nebo Apache Qpid). Je to čistě transportní protokol, který nediktuje vnitřní architekturu brokera, což zvyšuje flexibilitu na úkor složitosti. | ===== Srovnání s ostatními protokoly ===== ^ Protokol ^ Zaměření ^ Hlavní rozdíl ^ | **HTTP** | Webové služby | Synchronní (čeká se na odpověď). | | **MQTT** | IoT (Internet věcí) | Extrémně lehký, ale méně funkcí pro komplexní směrování. | | **AMQP** | Enterprise Messaging | Robustní, bezpečné, podporuje transakce a složitou logiku. | ===== Výhody pro vývojáře ===== * **Oddělení (Decoupling):** Odesílatel nemusí vědět, kdo je příjemce, ani jestli je právě online. * **Vyrovnávání zátěže:** Pokud do fronty přichází moc zpráv, stačí spustit více instancí příjemce. * **Odolnost proti chybám:** Pokud spadne server s aplikací, zprávy zůstanou bezpečně uloženy v AMQP brokeru. --- **Viz také:** [[rabbitmq|RabbitMQ]], [[microservices|Mikroslužby]], [[asynchronni-zpracovani|Asynchronní zpracování]], [[mqtt|MQTT]]