Jakarta messaging

Java Message Service ( JMS ) er en programmeringsgrænseflade (API) til styring af en Message Oriented Middleware (MOM) til afsendelse og modtagelse af meddelelser fra en klient , som er skrevet på Java- programmeringssproget . JMS sigter mod at muliggøre løst koblet, pålidelig og asynkron kommunikation mellem komponenterne i en distribueret applikation.

JMS er en del af Java Platform, Enterprise Edition ; Specifikationen af ​​tjenesten og den tilknyttede API blev standardiseret af Java Community Process inden for rammerne af JSR 914. Den aktuelle version af JMS er version 2.0 fra 21. maj 2013 og er en del af Java Enterprise Edition 7.0.

Til applikationen har du brug for en udbyder, der implementerer API'en og dermed leverer tjenesten. Der er både kommercielle produkter og open source- projekter til dette.

funktionalitet

Beskeder er en mulighed for løst koblet og distribueret kommunikation i form af meddelelser sendt mellem softwarekomponenter. Messaging forsøger at bryde den ellers tætte kobling af andre kommunikationsmuligheder såsom TCP- kommunikation via sockets , CORBA eller RMI ved at introducere en komponent placeret mellem klienterne. Dette sikrer, at klienterne ikke behøver at have detaljeret viden om fjernstationen (e) for deres kommunikation, hvilket øger anvendelsesområdet såvel som vedligeholdelse og genbrug af komponenterne.

JMS og drevet af disse tjenester understøtter to forskellige tilgange til afsendelse af meddelelser, på den ene side meddelelseskøen ( engelsk ) til såkaldte punkt-til-punkt- forbindelser og den anden et sign-dispatch-system (Engl. Topic ) til publish-subscribe -Kommunikation:

  • Med køen sender afsenderen til en kø, som en modtager er knyttet til. Hvis der ikke er nogen modtager tilgængelig, kan meddelelsen eventuelt gemmes, og potentielle modtagere kan når som helst hente den senere. For kun én modtager kan dette bedst sammenlignes med en pakkeservice. Hver forsendelse har nøjagtigt en modtager. Hvis han ikke er hjemme, kan han afhente forsendelsen når som helst senere. Hvis der er flere modtagere, når meddelelserne leveres, er det sikret, at hver meddelelse i kø tildeles nøjagtigt en gang. Dette gør det muligt at implementere belastningsbalancering, hvor modtagere kan tilføjes og fjernes efter behov.
  • I registreringsforsendelsessystemet sendes meddelelserne til et emne, som et hvilket som helst antal modtagere lytter til. Hvis meddelelsen ikke forbruges, fordi ingen modtager har registreret sig for emnet, er dette irrelevant. Dette kan bedst sammenlignes med en tv-station (udsendelse) . Enten tænder du fjernsynet og ser meddelelsen, eller du slukker for fjernsynet og kan ikke se meddelelsen. Eventuelt kan beskederne også gemmes midlertidigt (varigt abonnement) .

implementering

For at være i stand til at sende eller modtage meddelelser skal først en kø eller et emne bestemmes, gennem hvilken kommunikationen finder sted. Dette løses normalt ved hjælp af et JNDI- opslag:

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

Der oprettes derefter en forbindelse, hvor en session startes. Derefter, afhængigt af om afsendelse eller modtagelse, åbnes en afsender eller modtager, via hvilken beskeder kan sendes eller modtages:

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

eller.

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

Afsendelse og modtagelse via emne svarer til afsendelse og modtagelse via kø. Der er på den ene side, andre klasser bruges ( TopicSession, TopicConnection, TopicPublisher, TopicSubscriber, Topic), på den anden side, får man, når der modtages en besked via Topic dette middel ikke receiver.receive()starter, men redskaber en MessageListener.onMessage(Message)event handler, at beskeder via Messagemodtager begivenheder.

De forskellige meddelelsestyper, der kan sendes via køer og emner, er som følger:

Message
Besked uden indhold (brødtekst)
StreamMessage
Besked, der indeholder en strøm af Java-primitiver
MapMessage
Besked med et kort over Java-objekter
TextMessage
Besked med en streng (f.eks. Til XML-beskeder)
ObjectMessage
Besked med et serielt Java-objekt
BytesMessage
Besked med en strøm af bytes

JMS-udbyder

For at kunne bruge JMS kræves en JMS-udbyder, der administrerer emner, køer og sessioner. Følgende er en liste over JMS-udbydere. Den navngiver både kommerciel og gratis software , men hævder ikke at være komplet.

De JMS-udbydere, der kun tilbydes som en del af en Java EE- container (Java- applikationsserver ), er dog ikke på listen. En oversigt over Java EE-containere fås separat.

I nedenstående tabel betyder oplysningerne i kolonnen "Driftstilstande" følgende:

uafhængig
JMS-udbyderen kører som en uafhængig proces (stand alone) og derfor adskilt fra JMS-klientprocesserne. Kommunikation med klienterne foregår f.eks. Via TCP / IP- eller Unix-domænesockets .
indlejret
JMS-udbyderen kører i samme JVM (integreret, samlokaliseret) som en af ​​JMS-klienterne. En fordel er hurtigere transmission af meddelelser.

Moderne JMS-udbydere tillader begge driftstilstande.

Efternavn Selskab Licens Driftstilstande Url
ActiveMQ Apache Open Source ( Apache 2 ) uafhængig, indlejret apache.org
FuseMQ Rød hat Open source ( Apache 2 ), kommerciel support mulig uafhængig, indlejret fusesource.com
Apollo Apache Open Source ( Apache 2 ) apache.org
FioranoMQ Fiorano kommercielt
iBus // MessageServer Softwired kommercielt
HornetQ (tidligere kendt som " JBoss Messaging") Rød hat Open Source ( Apache 2 ) uafhængig, indlejret jboss.org
JORAM OW2 Open Source ( LGPL ) uafhængig, indlejret ow2.org
Djævlerokke Coridan Open Source ( Mozilla Public License ) uafhængig, indlejret
Mom4j Mom4j udviklingsteam Open Source (LGPL) indlejret
MRG-beskeder Rød hat kommercielt redhat.com
MuleMQ MuleSoft Inc. kommercielt mulesoft.com
OpenJMS Åben kilde uafhængig, indlejret sourceforge.net
Åbn meddelelseskø Sun Microsystems Åben kilde uafhængig mq.java.net
Oracle Advanced Queuing (OAQ) Oracle kommercielt indlejret oracle.com
Qpid Apache Open Source ( Apache 2 ) apache.org
SAP JMS SAP kommercielt indlejret sap.com
SonicMQ Progress software kommercielt
SwiftMQ IIT-software Open Source ( Apache 2 ) uafhængig swiftmq.com
TIBCO Enterprise-meddelelsestjeneste TIBCO kommercielt
webMethods Broker Software AG kommercielt uafhængig, indlejret softwareag.com
webMethods Universal Messaging Software AG kommercielt uafhængig, indlejret softwareag.com
Websphere MQ IBM kommercielt uafhængig, indlejret ibm.com
WSO2 meddelelsesmægler WSO2 Open Source ( Apache 2 ) uafhængig wso2.com

Weblinks

Individuelle beviser

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