Nel settore in­for­ma­ti­co, i messaggi vengono trasmessi da un servizio all’altro in maniera continua. Tali tra­smis­sio­ni devono essere mo­ni­to­ra­te, al­tri­men­ti i messaggi si bloccano a vicenda, pro­vo­can­do intoppi e osta­co­lan­do lo svol­gi­men­to ottimale dei processi. Per garantire una co­mu­ni­ca­zio­ne agevole tra le ap­pli­ca­zio­ni, è con­si­glia­bi­le attivare un programma in­ter­me­dio, ossia un servizio che si occupi della di­stri­bu­zio­ne di messaggi. Tale servizio viene chiamato broker di mes­sag­gi­sti­ca. Qui vi pre­sen­tia­mo uno dei più famosi: RabbitMQ.

Registra il tuo dominio
  • Domain Connect gratuito per una con­fi­gu­ra­zio­ne facile del DNS
  • Cer­ti­fi­ca­to SSL Wildcard gratuito
  • Pro­te­zio­ne privacy inclusa

Cos’è RabbitMQ?

RabbitMQ si basa su un principio di Advanced Message Queuing Protocols (AMQP). Il grande vantaggio dell’AMQP: mittente e de­sti­na­ta­rio non devono com­pren­de­re lo stesso lin­guag­gio di pro­gram­ma­zio­ne. Nell’ultimo periodo, i broker di mes­sag­gi­sti­ca si sono di­stac­ca­ti un po’ dal pro­to­col­lo AMQP e grazie ai plug-in fun­zio­na­no anche con altri pro­to­col­li di messaggi come STOMP o MQTT. Il principio di base però resta lo stesso: tra il pro­dut­to­re e il con­su­ma­to­re di un messaggio c’è una coda. È qui che vengono de­po­si­ta­ti i messaggi.

Fatto

In questo contesto, il termine “messaggio” viene uti­liz­za­to in modo molto ampio. Per messaggi si intendono di­spo­si­zio­ni ad altri programmi, ma anche effettivi messaggi di testo. Qualsiasi forma di tra­smis­sio­ne di in­for­ma­zio­ni può svolgersi tramite RabbitMQ o altri broker di messaggi.

Il vantaggio di RabbitMQ è che il pro­dut­to­re del messaggio non deve occuparsi anche della sua tra­smis­sio­ne. Il broker di mes­sag­gi­sti­ca consegna il messaggio per­met­ten­do al pro­dut­to­re di co­min­cia­re un nuovo incarico. Il mittente, dunque, non deve attendere la ricezione del messaggio da parte del de­sti­na­ta­rio. In processi di questo tipo il messaggio si trova in coda e può essere prelevato dal con­su­ma­to­re. Quando ciò avverrà, il mittente sarà già impegnato con un nuovo incarico. Si tratta dunque di un processo asincrono: mittente e de­sti­na­ta­rio non devono agire allo stesso ritmo.

Il processo con RabbitMQ:

La tra­smis­sio­ne di un messaggio richiede quattro elementi:

  • Producer: crea messaggi
  • Exchange: inoltra i messaggi
  • Queue: deposita i messaggi
  • Consumer: rielabora il messaggio

Il producer pubblica un messaggio, ma non lo invia di­ret­ta­men­te al consumer, perché lo trasmette all’exchange. Questo elemento è re­spon­sa­bi­le di inoltrare i messaggi a diverse code. Di queste si servono poi i consumer con i messaggi. Sia l’elemento exchange che la queue sono parti di RabbitMQ e vengono am­mi­ni­stra­ti dal software. Per garantire che i messaggi rag­giun­ga­no i de­sti­na­ta­ri corretti, si uti­liz­za­no le routing key. Il mittente dà al messaggio una routing key, che funziona come un indirizzo. Con l’ausilio di una chiave, l’exchange è in grado di ri­co­no­sce­re come in­di­riz­za­re il messaggio.

Tra l’exchange e la queue si trova il co­sid­det­to binding. At­tra­ver­so di esso ogni singola coda viene collegata all’exchange. Inoltre il binding definisce i criteri con cui un messaggio deve essere inoltrato. Esistono quattro diversi tipi di di­stri­bu­zio­ne di un messaggio.

Direct Exchange

Un Direct Exchange è un col­le­ga­men­to diretto tra mittente e de­sti­na­ta­rio. Il producer fornisce il messaggio con una routing key, che cor­ri­spon­de alla relativa binding key della coda. Ciò significa che entra in gioco una sola coda, a cui di solito cor­ri­spon­de un consumer.

Topic Exchange

Questo tipo di exchange amplia il concetto di direct exchange. Qui non è solo un criterio (Routing Key = Binding Key) ma più code ad entrare in gioco. Funziona at­tra­ver­so un me­ta­ca­rat­te­re. Così possono essere accettate diverse code, ossia binding key, mentre altre restano escluse.

Fanout Exchange

La fanout exchange è una lista broadcast. Si inoltra un messaggio a tutte le possibili code. Non avviene alcun tipo di selezione. Si ignora una routing key.

Header Exchange

Anche nel caso di un header exchange il sistema ignora una routing key. Al suo posto è l’header a svolgere un ruolo fon­da­men­ta­le. Qui l’elemento exchange trova gli attributi, necessari per in­di­riz­za­re le code corrette. In un certo modo un header exchange funziona in maniera analoga ad un topic exchange, poiché anche in questo caso vengono coinvolte molte code, ma non tutte.

I Consumer, e cioè i software de­sti­na­ta­ri, si re­gi­stra­no in code precise per potersi riferire ai messaggi. Perciò è previsto un Consumer per coda. Se più consumer prendono messaggi dalla stessa coda, non è possibile garantire la loro corretta di­stri­bu­zio­ne. Si decide in maniera fa­col­ta­ti­va per ogni messaggio, se il de­sti­na­ta­rio deve ri­co­no­scer­ne il contenuto o se questo non è ne­ces­sa­rio.

RabbitMQ nell’utilizzo

RabbitMQ è un server open source scritto in Erlang e può essere scaricato dal sito ufficiale nella versione per Linux, BSD, Unix, Windows e macOS. Si consiglia inoltre l’utilizzo di plug-in, che sem­pli­fi­ca­no il lavoro con il broker di mes­sag­gi­sti­ca am­plian­do­ne le fun­zio­na­li­tà. Per prima cosa deve essere presente il plug-in Ma­na­ge­ment, che è compreso nell’in­stal­la­zio­ne standard ma deve essere attivato. Grazie alla sua in­ter­fac­cia grafica gli utenti possono am­mi­ni­stra­re RabbitMQ, avere una pa­no­ra­mi­ca dei messaggi in coda e vi­sua­liz­za­re le sta­ti­sti­che.

A tal proposito può essere molto im­por­tan­te il plug-in Shovel: questo permette di collegare due istanze broker tra loro. Ciò si rivela utile, ad esempio, per di­stri­bui­re meglio il carico. Inoltre, in questo modo, si spostano i dati sensibili o molto vo­lu­mi­no­si, anche per motivi di sicurezza, in una rete com­ple­ta­men­te diversa.

La co­mu­ni­ca­zio­ne funziona tramite TCP, per il quale RabbitMQ necessita di porte. Queste non possono essere chiuse né bloccate da altre ap­pli­ca­zio­ni. Una lista di tutte le porte si trova nella do­cu­men­ta­zio­ne di RabbitMQ.

In sintesi

RabbitMQ convince gli utenti so­prat­tut­to per la sua struttura leggera. È un broker di messaggi semplice da impostare e può essere uti­liz­za­to in molte si­tua­zio­ni. In scenari più grandi, gli svi­lup­pa­to­ri e gli admin pre­fe­ri­sco­no piuttosto ricorrere a Apache Kafka.

Vai al menu prin­ci­pa­le