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.[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]

Implementazioni

[modifica | modifica wikitesto]

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]

  1. ^ STOMP, su stomp.github.io. URL consultato il 25 settembre 2024.
  2. ^ a b c d e stomp.github.io, https://stomp.github.io/stomp-specification-1.2.html#Abstract. URL consultato il 25 settembre 2024.
  3. ^ stomp.github.io, https://stomp.github.io/stomp-specification-1.2.html#BEGIN. URL consultato il 25 settembre 2024.
  4. ^ stomp.github.io, https://stomp.github.io/stomp-specification-1.2.html#COMMIT. URL consultato il 25 settembre 2024.
  5. ^ stomp.github.io, https://stomp.github.io/stomp-specification-1.2.html#ABORT. URL consultato il 25 settembre 2024.
  6. ^ a b stomp.github.io, https://stomp.github.io/stomp-specification-1.2.html#ACK. URL consultato il 25 settembre 2024.
  7. ^ stomp.github.io, https://stomp.github.io/stomp-specification-1.2.html#DISCONNECT. URL consultato il 25 settembre 2024.
  8. ^ Stomp - ActiveMQ - The Apache Software Foundation!, su activemq.apache.org.
  9. ^ Chapter 48. Interoperability, su docs.jboss.org. URL consultato il 25 settembre 2024.
  10. ^ Habari STOMP Client for OpenMQ | Habarisoft, su www.habarisoft.com. URL consultato il 25 settembre 2024.
  11. ^ (EN) STOMP Plugin | RabbitMQ, su www.rabbitmq.com. URL consultato il 25 settembre 2024.
  12. ^ Fuse MQ Enterprise - Connectivity Guide - Stomp Heartbeats, su access.redhat.com.
  13. ^ (EN) OpenSource Community, Introduction, su syslog-ng documentation. URL consultato il 25 settembre 2024.
  14. ^ STOMP - CERN Messaging Service - User Guide, su mig-user.docs.cern.ch. URL consultato il 25 settembre 2024.

Collegamenti esterni

[modifica | modifica wikitesto]