Messaggi di Jakarta

Java Message Service ( JMS ) è un'interfaccia di programmazione (API) per il controllo di un MOM ( Message Oriented Middleware ) per l'invio e la ricezione di messaggi da un client , scritto nel linguaggio di programmazione Java . JMS mira a consentire una comunicazione liberamente accoppiata, affidabile e asincrona tra i componenti di un'applicazione distribuita.

JMS fa parte di Java Platform, Enterprise Edition ; la specifica del servizio e l'API associata sono state standardizzate dal Java Community Process nell'ambito di JSR 914. La versione corrente di JMS è la versione 2.0 del 21 maggio 2013 e fa parte di Java Enterprise Edition 7.0.

Per l'applicazione è necessario un provider che implementa l'API e quindi fornisce il servizio. Ci sono sia prodotti commerciali che progetti open source per questo.

funzionalità

La messaggistica è una possibilità di comunicazione debolmente accoppiata e distribuita sotto forma di messaggi inviati tra componenti software. La messaggistica cerca di interrompere l'accoppiamento altrimenti stretto di altre opzioni di comunicazione come la comunicazione TCP tramite socket , CORBA o RMI introducendo un componente situato tra i client. Ciò garantisce che i clienti non debbano avere una conoscenza dettagliata delle stazioni remote della loro comunicazione, il che aumenta l'area di applicazione, nonché la manutenzione e il riutilizzo dei componenti.

JMS e guidati da questi servizi supportano due diversi approcci per l'invio di messaggi, da un lato, la coda di messaggi ( inglese coda ) per i cosiddetti point-to-point connessioni e l'altro un sistema di accesso spedizione (Engl. Tema ) per pubblica-sottoscrizione -Comunicazione:

  • Con la coda, il mittente invia a una coda a cui è collegato un destinatario. Se non è disponibile alcun destinatario, il messaggio può essere facoltativamente salvato e i potenziali destinatari possono ritirarlo in un secondo momento in qualsiasi momento. Nel caso di un solo destinatario, questo può essere paragonato al meglio con un servizio di pacchi. Ogni spedizione ha esattamente un destinatario. Se non è a casa, può ritirare la spedizione in un secondo momento. Se sono presenti più destinatari, quando i messaggi vengono recapitati, si garantisce che ogni messaggio in coda venga assegnato esattamente una volta. Ciò consente di implementare il bilanciamento del carico, in cui i destinatari possono essere aggiunti e rimossi secondo necessità.
  • Nel sistema di invio della registrazione, i messaggi vengono inviati a un argomento su cui è in ascolto un numero qualsiasi di destinatari. Se il messaggio non viene consumato perché nessun destinatario si è registrato per l'argomento, ciò è irrilevante. Questo può essere paragonato al meglio a una stazione televisiva (trasmissione) . O accendi la TV e vedi il messaggio, oppure spegni la TV e non vedi il messaggio. Facoltativamente, i messaggi possono anche essere archiviati temporaneamente (abbonamento durevole) .

implementazione

Per poter inviare o ricevere messaggi, è necessario prima determinare una coda o un argomento attraverso il quale avviene la comunicazione. Questo di solito viene risolto utilizzando una ricerca JNDI :

Context ctx = new InitialContext();
QueueConnectionFactory factory = (QueueConnectionFactory) ctx.lookup("QueueConnectionFactory");
Queue myQueue = (Queue) ctx.lookup("MyQueue");

Viene quindi creata una connessione su cui viene avviata una sessione. Quindi, a seconda che si invii o si riceva, viene aperto un mittente o un destinatario, tramite il quale è possibile inviare o ricevere messaggi:

QueueConnection connection = factory.createQueueConnection();
QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
QueueSender sender = session.createSender(myQueue);
TextMessage message = session.createTextMessage();
sender.send(message);

o.

...
QueueReceiver receiver = session.createReceiver(myQueue);
connection.start();
Message message = receiver.receive();

L'invio e la ricezione tramite argomento è simile all'invio e la ricezione tramite coda. Ci sono da un lato, le altre classi utilizzate ( TopicSession, TopicConnection, TopicPublisher, TopicSubscriber, Topic), d'altra parte, si ha quando si riceve un messaggio via topic Ciò significa non receiver.receive()partire, ma implementa un MessageListener.onMessage(Message)gestore di eventi che i messaggi tramite Messagericeve gli eventi.

I diversi tipi di messaggi che possono essere inviati tramite code e argomenti sono i seguenti:

Message
Messaggio senza contenuto (corpo)
StreamMessage
Messaggio contenente un flusso di primitive Java
MapMessage
Messaggio con una mappa di oggetti Java
TextMessage
Messaggio con una stringa (ad es. Per messaggi XML)
ObjectMessage
Messaggio con un oggetto Java serializzato
BytesMessage
Messaggio con un flusso di byte

Provider JMS

Per poter utilizzare JMS, è necessario un provider JMS che gestisca gli argomenti, le code e le sessioni. Di seguito è riportato un elenco di provider JMS. Denomina software sia commerciale che gratuito , ma non pretende di essere completo.

Tuttavia, quei fornitori JMS offerti solo come parte di un contenitore Java EE ( server delle applicazioni Java ) non sono elencati. Una panoramica dei contenitori Java EE è disponibile separatamente.

Nella tabella seguente, le informazioni contenute nella colonna "Modalità operative" significano quanto segue:

indipendente
Il provider JMS viene eseguito come processo indipendente (autonomo) e quindi separato dai processi client JMS. La comunicazione con i client avviene, ad esempio, tramite TCP / IP o socket di dominio Unix .
incorporato
Il provider JMS viene eseguito nella stessa JVM (incorporata, colocata) di uno dei client JMS. Un vantaggio è la trasmissione più rapida dei messaggi.

I moderni provider JMS consentono entrambe le modalità operative.

Cognome azienda Licenza Modalità operative Url
ActiveMQ Apache Open Source ( Apache 2 ) indipendente, incorporato apache.org
FuseMQ Cappello rosso Open source ( Apache 2 ), supporto commerciale possibile indipendente, incorporato fusesource.com
Apollo Apache Open Source ( Apache 2 ) apache.org
FioranoMQ Fiorano commercialmente
iBus // MessageServer Softwired commercialmente
HornetQ (precedentemente noto come " JBoss Messaging") Cappello rosso Open Source ( Apache 2 ) indipendente, incorporato jboss.org
JORAM OW2 Open Source ( LGPL ) indipendente, incorporato ow2.org
MantaRay Coridan Open Source ( Mozilla Public License ) indipendente, incorporato
Mom4j Mom4j team di sviluppo Open Source (LGPL) incorporato
Messaggistica MRG Cappello rosso commercialmente redhat.com
MuleMQ MuleSoft Inc. commercialmente mulesoft.com
OpenJMS Open source indipendente, incorporato sourceforge.net
Apri la coda dei messaggi Sun Microsystems Open source indipendente mq.java.net
Oracle Advanced Queuing (OAQ) Oracolo commercialmente incorporato oracle.com
Qpid Apache Open Source ( Apache 2 ) apache.org
SAP JMS LINFA commercialmente incorporato sap.com
SonicMQ Software di progresso commercialmente
SwiftMQ Software IIT Open Source ( Apache 2 ) indipendente swiftmq.com
TIBCO Enterprise Message Service TIBCO commercialmente
webMethods Broker Software AG commercialmente indipendente, incorporato softwareag.com
webMethods Universal Messaging Software AG commercialmente indipendente, incorporato softwareag.com
Websphere MQ IBM commercialmente indipendente, incorporato ibm.com
Broker di messaggi WSO2 WSO2 Open Source ( Apache 2 ) indipendente wso2.com

link internet

Prove individuali

  1. J2EE: Java Message Service (JMS)
  2. Spec