JMS (Java Message Service): affidabilità
Pubblicato da Andrea Gumina su 25 Ottobre 2007
Aggiungo altre considerazioni al discorso su JMS iniziato qualche post fa.
—-><—-
JMS (Java Message System) è un protocollo di tipo MQ (Message Queue) spesso impiegato per conseguire l’asincronia, l’affidabilità, l’unica consegna e l’ordine sulla consegna.
JMS prevede la presenza di un provider interposto tra il produttore ed il consumatore del messaggio; in tal modo si crea un “percorso”, che il messaggio deve percorrere prima di essere consumato, in cui si possono distinguere il tratto produttore-provider ed il tratto provider-consumatore.
In questo post vorrei trattare più nel dettaglio il livello di affidabilità che JMS è in grado di offrire.

L’affidabilità maggiore che si possa conseguire con JMS si ha quando:
-
Si usano messaggi persistenti.
-
Non si usano code temporanee.
-
Si impongono sottoscrizioni durevoli per i topic.
-
Si conferma esplicitamente un messaggio solo dopo averlo consumato (CLIENT_ACKNOWLEDGE).
-
Le sessioni sono dichiarate transazionali.
Così facendo però, si ottiene la consegna garantita, l’affidabilità sul tratto provider-consumatore.
La specifica non prevede nulla circa il tratto produttore-provider: se il provider cessa di funzionare o accade qualcosa sul tratto in questione e non si prevede alcuna strategia di recupero il messaggio andrà perso; allo stesso modo se non si prevedono specifiche implementazioni non è possibile propagare la conferma di ricezione del messaggio sino al suo produttore.
Alcune implementazioni JMS risolvono il primo problema proponendo soluzioni eleganti, trasparenti al programmatore, ma “proprietarie” e che richiedono configurazione (essenzialmente rendendo persistente il messaggio ed affidando ad un “thread” separato il suo invio).
—-><—-
Hai trovato questo post interessante? Sottoscrivi il feed completo e partecipa alla discussione
