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]
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]
Tra i prodotti MOM che supportano STOMP, vi sono:
Tra le librerie per utilizzare STOMP dal lato client, vi sono stomp.py per Python e Net::STOMP::Client per Perl.[14]
- ^ 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.