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 kø ) 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
- JMS oversigt
- JMS-specifikation
- JMS med Oracle Advanced Queuing Detaljeret vejledning med Java-kodeeksempler til JMS med Oracle Advanced Queuing
- For at redde læseren fra at skulle slå links op unødigt er linkene til JMS-udbydere inkluderet i tabellen ovenfor.