Streaming Text Oriented Messaging Protocol
Streaming (o Simple) Text Oriented Message Protocol (STOMP), precedentemente noto come TTMP, è un semplice protocollo di comunicazione basato sul testo (text-based), di livello applicativo nella pila ISO/OSI, progettato per lavorare con middleware orientati ai messaggi (MOM). Fornisce un wire format interoperabile che consente ai client STOMP di parlare con qualsiasi broker di messaggi che supporti il protocollo.
Streaming (o Simple) Text Oriented Message Protocol (STOMP), precedentemente noto come TTMP, è un semplice protocollo di comunicazione basato sul testo (text-based), di livello applicativo nella pila ISO/OSI, progettato per lavorare con middleware orientati ai messaggi (MOM). Fornisce un wire format interoperabile che consente ai client STOMP di parlare con qualsiasi broker di messaggi che supporti il protocollo.[1]
Descrizione
[modifica | modifica wikitesto]Il protocollo è sostanzialmente simile a HTTP e funziona su TCP utilizzando i seguenti comandi (frame lato client):
- CONNECT (dalla versione 1.0) o STOMP (dalla versione 1.2)[2] (utilizzato dal client che deve specificare l'header host, per indicare con quale host virtuale desidera connettersi, e l'header accept-version, per indicare la versione del protocollo STOMP che supporta)[2]
- SEND (utilizzato dal client che vuole comportarsi da produttore nel problema del produttore/consumatore)[2]
- SUBSCRIBE (utilizzato dal client che vuole comportarsi da consumatore nel problema del produttore/consumatore, indicando la coda o il topic di destinazione verso cui vuole consumare)[2]
- UNSUBSCRIBE
- BEGIN (per iniziare una transazione, specificando obbligatoriamente un identificatore della transazione con l'header transaction)[3]
- COMMIT (per fare il commit di una transazione in corso, specificandone obbligatoriamente l'identificatore)[4]
- ABORT (per fare il rollback di una transazione in corso, specificandone obbligatoriamente l'identificatore)[5]
- ACK (per indicare di aver consumato un messaggio proveniente da una sottoscrizione che si è effettuata)[6]
- NACK (per indicare di non aver consumato un messaggio)[6]
- DISCONNECT (per disconnettersi dal server e chiudere la socket, in modo asincrono)[7]
La comunicazione da client a server avviene attraverso un “frame” lato client tra quelli precedentemente indicati, composto da un certo numero di righe. La prima riga contiene il comando, seguito da intestazioni nella forma <chiave>: <valore> (una per riga), seguita da una riga vuota e quindi dal contenuto del corpo, che termina con un carattere null. La comunicazione da server a client avviene attraverso i frame lato server MESSAGE, RECEIPT o ERROR con un formato simile di intestazioni e contenuto del corpo. La codifica di caratteri utilizzata di default da STOMP è UTF-8.[2]
Implementazioni
[modifica | modifica wikitesto]Tra i prodotti MOM che supportano STOMP, vi sono:
- Apache ActiveMQ[8]
- HornetQ[9]
- Open Message Queue (OpenMQ)[10]
- RabbitMQ[11]
- Fuse Message Broker[12]
- syslog-ng con un plugin apposito[13]
Tra le librerie per utilizzare STOMP dal lato client, vi sono stomp.py per Python e Net::STOMP::Client per Perl.[14]
Note
[modifica | modifica wikitesto]- ^ STOMP, su stomp.github.io. URL consultato il 25 settembre 2024.
- ^ a b c d e stomp.github.io, https://stomp.github.io/stomp-specification-1.2.html#Abstract. URL consultato il 25 settembre 2024.
- ^ stomp.github.io, https://stomp.github.io/stomp-specification-1.2.html#BEGIN. URL consultato il 25 settembre 2024.
- ^ stomp.github.io, https://stomp.github.io/stomp-specification-1.2.html#COMMIT. URL consultato il 25 settembre 2024.
- ^ stomp.github.io, https://stomp.github.io/stomp-specification-1.2.html#ABORT. URL consultato il 25 settembre 2024.
- ^ a b stomp.github.io, https://stomp.github.io/stomp-specification-1.2.html#ACK. URL consultato il 25 settembre 2024.
- ^ stomp.github.io, https://stomp.github.io/stomp-specification-1.2.html#DISCONNECT. URL consultato il 25 settembre 2024.
- ^ Stomp - ActiveMQ - The Apache Software Foundation!, su activemq.apache.org.
- ^ Chapter 48. Interoperability, su docs.jboss.org. URL consultato il 25 settembre 2024.
- ^ Habari STOMP Client for OpenMQ | Habarisoft, su www.habarisoft.com. URL consultato il 25 settembre 2024.
- ^ (EN) STOMP Plugin | RabbitMQ, su www.rabbitmq.com. URL consultato il 25 settembre 2024.
- ^ Fuse MQ Enterprise - Connectivity Guide - Stomp Heartbeats, su access.redhat.com.
- ^ (EN) OpenSource Community, Introduction, su syslog-ng documentation. URL consultato il 25 settembre 2024.
- ^ STOMP - CERN Messaging Service - User Guide, su mig-user.docs.cern.ch. URL consultato il 25 settembre 2024.