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
- Panoramica di JMS
- Specifica JMS
- JMS con Oracle Advanced Queuing Tutorial dettagliato con esempi di codice Java per JMS con Oracle Advanced Queuing
- Per evitare che il lettore debba cercare inutilmente i collegamenti, i collegamenti ai provider JMS sono inclusi nella tabella sopra.