RabbitMQ spiegato in 5 minuti o meno

Vedremo oggi come velocizzare i tempi di caricamento delle tue pagine eseguendo in modo asincrono le elaborazioni più pesanti, il tutto gestito in maniera molto semplice, grazie a RabbitMQ.

La stabilità e la velocità di un’applicazione o di un sito web sono sicuramente tra i fattori più importanti per gli utenti. Chi non ha mai lasciato un sito prima ancora di vedere la prima pagina perché ci ha messo troppo tempo?

Cos’è RabbitMQ

RabbitMQ è un broker di messaggistica open source, distribuito e scalabile che funge da intermediario per una comunicazione efficiente tra produttori e consumatori.

RabbitMQ implementa il protocollo di messaggistica a livello di applicazione AMQP, che si concentra sulla comunicazione di messaggi asincroni con garanzia di consegna attraverso conferme di ricezione dei messaggi dal broker al produttore e dai consumatori al produttore.

Come funziona RabbitHQ

In modo semplificato, RabbitMQ definisce le code che memorizzeranno i messaggi inviati dai produttori fino a quando le applicazioni che consumano non ricevono il messaggio e lo elaborano. Ci permette di progettare e realizzare sistemi distribuiti, in cui un sistema è suddiviso in moduli indipendenti che comunicano tra loro tramite messaggi.

Come tutta la comunicazione, abbiamo bisogno di un produttore, di un messaggio e di un destinatario. Al centro della torta c’è RabbitMQ, che sarebbe il luogo in cui il messaggio attende il destinatario.

Capiamo meglio come funziona conoscendo le tipologie di scambi che rappresentano lo scambio di messaggi.

Tipi di scambio

Attraverso gli scambi, ogni volta che inviamo un messaggio tramite RabbitMQ, non lo inviamo direttamente a una coda; affinché altri sistemi lo leggano, lo inviamo a uno scambio, che è responsabile dell’inoltro dei messaggi a code diverse.

Credito immagine: CloudAQMP

I tipi di scambio sono Diretto, Fanout, Argomento e Lettori.

Scambio diretto

Supponiamo che un produttore debba inviare un messaggio di conferma dell’acquisto a tre consumatori. Cioè, il sistema deve comunicare con altri tre sistemi diversi per effettuare l’acquisto.

Poiché RabbitMQ invia il messaggio separatamente a ciascuna coda, c’è slancio per fare in modo che questi altri sistemi ricevano il messaggio direttamente.

Normalmente lo scambio inoltra il messaggio alle code, ma spesso non vogliamo che i nostri messaggi vengano inviati a tutte le code. Pertanto, ci sono diverse condizioni che possiamo applicare per far funzionare uno scambio.

Quindi puoi inviare il tuo messaggio a un solo consumatore; invece di essere inviato a tutti.

Chiave di associazione: per connettere una coda a uno scambio, è necessario creare un legame, una relazione tra una coda e uno scambio, come un connettore.

Chiave di instradamento: in questo bind, possiamo anche creare un elemento chiamato chiave di instradamento, che in altre parole è una chiave per inoltrare i nostri messaggi a una coda specifica.

Se disponi di una chiave di instradamento X, una chiave di instradamento Y e una chiave di instradamento Z, il messaggio con la chiave di instradamento Y, ad esempio, passerà attraverso la coda Y e verrà consegnato direttamente al consumatore definito per ricevere il messaggio.

In questo modo possiamo avere più code collegate ad una centrale, ma allo stesso tempo possono avere anche relazioni diverse con le centrali utilizzando le chiavi di instradamento.

Scambio fanout

Quando il messaggio viene inviato allo scambio, viene inviato a tutte le code ad esso collegate. Quindi, se hai 10 code collegate a uno scambio fanout, tutte le code riceveranno il messaggio che è stato inviato.

Scambio di argomenti

È uno degli scambi più flessibili, che ci consente di inviare messaggi in base all’argomento. E in base al modo in cui denominate le chiavi di instradamento, è possibile creare modelli di regole e relazioni tra i sistemi.

Ad esempio: chiave di instradamento (x.*); chiave di instradamento(*.z); chiave di instradamento (*.y.*).

Cos’è AQMP in RabbitMQ

AMQP (Advanced Message Queuing Protocol) è un protocollo di messaggistica aperto utilizzato per definire il trasporto di messaggi tra più applicazioni. È simile ai protocolli HTTP e TCP in quanto è un protocollo a livello di rete, tranne per il fatto che consente il trasporto asincrono.

RabbitMQ ha scelto di implementare AMQP per diversi motivi. Il primo è che questo protocollo è descritto come uno standard per il middleware, a differenza di JMS, che definisce un’API.

Un consorzio internazionale, che comprende grandi aziende come Red Hat, Cisco Systems e Microsoft, ha scritto questa specifica AMQP. Il secondo è l’interoperabilità di questo protocollo, che consente a qualsiasi applicazione che implementa AMQP di comunicare con un broker AMQP.

AMQP non è l’unico protocollo utilizzato da RabbitMQ. L’immagine sottostante rappresenta tutti i protocolli, linguaggi e API implementati e/o supportati da RabbitMQ.

Le migliori caratteristiche di RabbitMQ

Oltre a consentire l’integrazione di diverse applicazioni tramite messaggi in modo asincrono e da posizioni diverse, RabbitMQ ci offre altre funzionalità che lo hanno reso molto popolare nel mondo dei broker di messaggistica:

Archiviazione affidabile

RabbitMQ incorpora diverse funzionalità che gli consentono di garantire la consegna dei messaggi. Tra questi, fornisce spazio di archiviazione quando nessun consumatore può ricevere il messaggio. Consente ai consumatori di accettare la consegna del messaggio per assicurarsi che sia stato elaborato correttamente.

Se l’elaborazione fallisce, RabbitMQ consente al messaggio di essere riaccodato per essere consumato da un’istanza diversa del consumatore o essere elaborato nuovamente dallo stesso consumatore che inizialmente ha avuto esito negativo quando viene ripristinato.

RabbitMQ garantisce anche l’ordine di consegna dei messaggi; ovvero vengono consumati nello stesso ordine in cui sono arrivati ​​nelle code RabbitMQ.

Creazione di cluster

Sebbene RabbitMQ offra ottime prestazioni elaborando migliaia di messaggi al secondo, a volte deve essere in grado di elaborare un numero maggiore di messaggi senza influire sulle prestazioni dell’applicazione.

Per questo, RabbitMQ consente la creazione di cluster per scalare orizzontalmente la soluzione, che è trasparente sia per i produttori che per i consumatori.

Code ad alta disponibilità

In RabbitMQ, le code possono essere replicate su più nodi in un cluster, assicurando che in caso di guasto o tempo di inattività del nodo, il broker possa continuare a ricevere messaggi dai produttori e consegnarli ai consumatori appropriati.

Instradamento flessibile

In RabbitMQ è possibile definire regole di instradamento flessibili, anche seguendo un certo schema, per instradare i messaggi tra scambi e code, tramite binding.

Supporto protocollo multiplo

Oltre a supportare il protocollo AMQP, RabbitMQ supporta STOMP, MQTT e HTTP tramite plugin. Incorpora inoltre meccanismi di autenticazione e controllo degli accessi per i componenti di ciascun broker.

Casi d’uso reali di RabbitMQ

I casi d’uso più importanti di RabbitMQ stanno rendendo possibile la garanzia di asincronicità tra le applicazioni, riducendo l’accoppiamento tra le applicazioni, distribuendo avvisi e controllando la coda dei lavori in background.

Tuttavia, i casi d’uso pratici di RabbitMQ sono nell’eCommerce, dove t viene utilizzato per manipolare, elaborare e inoltrare i tuoi ordini di vendita a sistemi in altri settori, come la distribuzione e l’emissione di fatture.

Durante l’elaborazione degli ordini, puoi inoltrare il tuo messaggio di vendita al centro di distribuzione e a un’area di fatturazione. In questo schema tutto funziona in orizzontale, seguendo lo schema asincrono per l’invio dei messaggi, ma spesso è possibile inviare un’azione a più code.

Seguendo l’esempio precedente, questa funzione può essere molto utile quando il cliente effettua un acquisto e il prodotto deve essere preparato per la distribuzione, il trasporto e le fatture.

E poiché ciascuno di questi settori è un sistema diverso, l’obiettivo di RabbitMQ è inoltrare tutti questi messaggi ai sistemi corrispondenti.

Alternative Rabbit MQ:

RabbitMQ è molto più semplice di quanto sembri e ci sono diverse alternative che includono:

#1. FerroMQ

IronMQ è un software di accodamento dei messaggi super veloce. È altamente disponibile, durevole nel design e preferibilmente per una consegna una tantum. IronMQ è la soluzione cloud-native più potente per la moderna architettura delle applicazioni.

Supporta le code push, le code pull e i sondaggi lunghi, che mantengono le richieste di sondaggio aperte più a lungo. Inoltre, può utilizzare più data center ad alta disponibilità, il che facilita la scalabilità.

Puoi eseguire la distribuzione nel cloud, su hardware condiviso o dedicato oppure on-premise. Ha anche una gamma di librerie client con documentazione di facile lettura.

#2. Apache Kafka

Kafka è una piattaforma con una forte presenza nello streaming di eventi distribuiti. Fondamentalmente, Kafka è progettato come un log di commit replicato, distribuito e persistente.

La sua massima usabilità è per i microservizi di alimentazione basati sugli eventi o per le applicazioni di elaborazione del flusso su larga scala, replicando automaticamente gli eventi in modo asincrono all’interno del cluster per la tolleranza agli errori e l’elevata disponibilità.

#3. Apache ActiveMQ

ActiveMQ è un broker di messaggi multiprotocollo basato su Java. Con esso, possiamo integrare le applicazioni utilizzando il protocollo di accodamento dei messaggi AMQP a livello di applicazione.

Implementa diversi protocolli per l’integrazione, come JMS (Java nativo) e Stomp (che può essere utilizzato dalle applicazioni PHP), tra gli altri.

Inoltre, Amazon ha la sua versione “gestita” chiamata Amazon MQ, che rende molto più semplice l’utilizzo del servizio.

Parole finali

I broker di messaggistica sono stati tradizionalmente un elemento importante all’interno delle architetture delle organizzazioni. Tuttavia, con l’aumento degli utenti che accedono ai sistemi aziendali attraverso canali diversi, sono necessari prodotti che consentano di scalarli orizzontalmente a basso costo. Consentire l’elaborazione di un gran numero di messaggi al secondo.

È qui che una nuova generazione di broker, come RabbitMQ, sta diventando più rilevante nelle applicazioni moderne, che cercano di offrire elevati livelli di disponibilità, affidabilità, interoperabilità e prestazioni ai nostri clienti.

Puoi anche esplorare alcune affidabili piattaforme di hosting RabbitMQ per la tua applicazione.