JMS e AMQP - RabbitMQ


133

Sto cercando di capire quale JMS e come è collegato alla terminologia AMQP. So che JMS è un'API e AMQP è un protocollo.

Ecco i miei presupposti (e anche le domande)

  • RabbitMQ utilizza il protocollo AMQP (implementa piuttosto il protocollo AMQP)
  • I client Java devono utilizzare le librerie client del protocollo AMQP per connettersi / utilizzare RabbitMQ
  • Dove entra in gioco l'API JMS? L'API JMS dovrebbe usare le librerie client AMQP per connettersi a RabbitMQ?
  • Di solito usiamo JMS per connettere broker di messaggi come RabbitMQ, ActiveMQ, ecc. Allora qual è il protocollo predefinito usato qui invece di AMQP?

Alcuni dei precedenti potrebbero essere stupidi. :-) Ma sto cercando di avvolgerci la testa.


3
@KevinRave: la risposta selezionata è errata su alcuni punti principali che sottolinea. Ho aggiunto un commento in modo che tu possa guardarlo.
2020,

@KevinRave Ho modificato la risposta. Ora la parte controversa è stata sostituita. Ora l'intera risposta è perfettamente OK
Freak

Non so chi ha modificato la mia risposta e ha dato questo punto improprio che era al numero 3 .. perché ho già chiesto la cosa che Kevin sta dicendo al punto 2. Leggere sempre attentamente prima di votare o dare suggerimenti
Freak

1
Dai un'occhiata alla sezione JMS in questo articolo. Ha una spiegazione molto dettagliata saipraveenblog.wordpress.com/2014/12/08/…
java_geek,

Risposte:


118

La tua domanda è un po 'disordinata e assomiglia a una domanda difficile in un questionario :) (Poiché gli insegnanti cercano sempre di porre domande semplici rendendo complesse: DI spero che tu non sia un insegnante :)) Vediamole tutte una per una.

Come sai:

L' API JMS ( Java Message Service ) è un'API MOM (Java Message Oriented Middleware) per l'invio di messaggi tra due o più client . JMS fa parte della piattaforma Java, Enterprise Edition, ed è definito da una specifica sviluppata nell'ambito del Java Community Process come JSR 914. È uno standard di messaggistica che consente ai componenti dell'applicazione basati su Java Enterprise Edition (Java EE) di creare, inviare, ricevere e leggere messaggi. Consente alla comunicazione tra i diversi componenti di un'applicazione distribuita di essere liberamente accoppiata, affidabile e asincrona .

Ora (da Wikipedia ):

Advanced Message Queuing Protocol (AMQP) è un protocollo di livello applicazione standard aperto per middleware orientato ai messaggi. Le caratteristiche distintive di AMQP sono l'orientamento, l'accodamento, l'instradamento dei messaggi (compresi punto-punto e pubblicazione e sottoscrizione), affidabilità e sicurezza.

E la cosa più importante (sempre da Wikipedia):

A differenza di JMS, che definisce semplicemente un'API, AMQP è un protocollo a livello di filo. Un protocollo a livello di filo è una descrizione del formato dei dati inviati attraverso la rete come un flusso di ottetti. Di conseguenza, qualsiasi strumento in grado di creare e interpretare messaggi conformi a questo formato di dati può interagire con qualsiasi altro strumento conforme indipendentemente dal linguaggio di implementazione

Alcune cose importanti che dovresti sapere:

  1. Tieni presente che AMQP è una tecnologia di messaggistica che non implementa l'API JMS.
  2. JMS è API e AMQP è un protocollo, quindi non ha senso affermare che cos'è il protocollo predefinito di JMS, ovviamente le applicazioni client usano HTTP / S come protocollo di connessione quando si richiama un servizio Web WebLogic.
  3. JMS è solo una specifica API. Non utilizza alcun protocollo. Un provider JMS (come ActiveMQ) potrebbe utilizzare qualsiasi protocollo sottostante per realizzare l'API JMS. Ad esempio: Apache ActiveMQ può utilizzare uno dei seguenti protocolli: AMQP, MQTT, OpenWire, REST (HTTP), RSS e Atom, Stomp, WSIF, WS Notification, XMPP. Ti suggerisco di leggere Utilizzo di JMS Transport come protocollo di connessione .

In bocca al lupo :)


20
I am not sure but I believe that AMQP also uses HTTP/S protocol but AMQP is enhacement is messaging protocol over HTTP: No. Non è corretto. JMS uses simple HTTP but for RabbitMQ/ActiveMq, they uses enhanced protocol.: No. Non è corretto. JMS è solo una specifica API. Non utilizza alcun protocollo. Un provider JMS (come ActiveMQ) potrebbe utilizzare qualsiasi protocollo sottostante per realizzare l'API JMS. Ad esempio: Apache ActiveMQ può utilizzare uno dei seguenti protocolli: AMQP, MQTT, OpenWire, REST (HTTP), RSS e Atom, Stomp, WSIF, WS Notification, XMPP.
2020,

Ho modificato la risposta. Ora la parte controversa è stata sostituita.
Freak

1
@brainOverflow Non so chi ha modificato la mia risposta e ha dato questo punto improprio che era al numero 3 .. perché ho chiesto la cosa che stai dicendo al punto 2. Leggi sempre attentamente prima di votare o dare suggerimenti
Freak

ho già aggiunto materiale da quel PDF in modo da poter andare anche ad altri link
Freak

43

Partiamo dalla base.

RabbitMQ è un MOM (Message Oriented Middleware), sviluppato con Erlang (un linguaggio di programmazione orientato al TLC) e implementando il protocollo wire AMQP (Advance Message Queuing Protocol). Attualmente sono disponibili molte API client (ad es. Java, C ++, RESTful, ecc.) Per consentire l'utilizzo dei servizi di messaggistica RabbitMQ.

JMS (Java Messaging Service) è uno standard JCP che definisce un set di API strutturate devono essere implementate da una MOM. Un esempio di MOM che implementa (cioè è compatibile con) le API JMS è ActiveMQ; c'è anche HornetMQ e altri. Tali software ottengono le API JMS e implementano di conseguenza gli schemi di scambio.

Secondo quanto sopra, preso lo scheletro delle API JMS, un'istanza di RabbitMQ e delle sue API client Java, è possibile sviluppare un'implementazione JMS facendo uso di RabbitMQ: l'unica cosa che si deve fare, a quel punto, è implementare modello di scambio (su RabbitMQ) secondo la specifica JMS.

La chiave è: un insieme di API, come JMS, può essere implementato indipendentemente dalla tecnologia (in questo caso, RabbitMQ).


Cosa significa TLC?
mvmn,

@mvmm TLC è l'acronimo di Telecommunication. Dai un'occhiata a [1]. [1] allacronym.com/TLC/Telecommunication
Paolo Maresca,

15

JMS, quando è stato definito, non ha definito un protocollo tra il client JMS e un server di messaggistica. Il client JMS, che implementa l'API JMS, può utilizzare qualsiasi protocollo per comunicare con il server di messaggistica. Il client deve solo essere conforme a API JMS. È tutto. Solitamente i client JMS utilizzano un protocollo personalizzato che il loro server di messaggistica comprende.

AMQP è invece un protocollo tra un client di messaggistica e un server di messaggistica. Un client JMS può utilizzare AMQP come protocollo per comunicare con il server di messaggistica. E ci sono clienti come quelli disponibili.

http://www.lshift.net/blog/2009/03/16/openamqs-jms-client-with-rabbitmq-server


2
  • Dove entra in gioco l'API JMS? L'API JMS dovrebbe usare le librerie client AMQP per connettersi a RabbitMQ?

JMS è un'API, quindi alcune API JMS sono implementate tramite il protocollo AMQP (come Apache QPID JMS ) mentre la maggior parte delle API JMS utilizza altri protocolli. Se la versione del protocollo AMQP è la stessa, tale client dovrebbe essere in grado di comunicare con un altro client AMQP.

  • Di solito usiamo JMS per connettere broker di messaggi come RabbitMQ, ActiveMQ, ecc. Allora qual è il protocollo predefinito usato qui invece di AMQP?

Dipende dalla configurazione dell'API JMS. Per ActiveMQ, potrebbe essere AMQP ma per impostazione predefinita è "openwire"



0

https://spring.io/understanding/AMQP

AMQP (Advanced Message Queuing Protocol) è una specifica di filo pubblicata pubblicamente per la messaggistica asincrona. Viene specificato ogni byte di dati trasmessi. Questa caratteristica consente alle librerie di essere scritte in molte lingue e di funzionare su più sistemi operativi e architetture di CPU, il che rende uno standard di messaggistica realmente interoperabile e multipiattaforma.

AMQP viene spesso confrontato con JMS (Java Message Service), il sistema di messaggistica più comune nella comunità Java. Una limitazione di JMS è che le API sono specificate, ma il formato del messaggio non lo è. A differenza di AMQP, JMS non ha requisiti per il modo in cui i messaggi vengono formati e trasmessi. In sostanza, ogni broker JMS può implementare i messaggi in un formato diverso. Devono solo usare la stessa API.


-1

Ho il sospetto che tu stia cercando questa documentazione che dice, in parte:

Il client JMS per vFabric RabbitMQ è una libreria client per vFabric RabbitMQ. vFabric RabbitMQ non è un provider JMS ma ha funzionalità necessarie per supportare i modelli di messaggistica JMS Queue e Topic. Il client JMS per RabbitMQ implementa la specifica JMS 1.1 sull'API del client Java RabbitMQ, consentendo così alle applicazioni JMS nuove ed esistenti di connettersi con i broker RabbitMQ tramite Advanced Message Queuing Protocol (AMQP).


No. Non è quello che stavo guardando. Ma simile
Kevin Rave,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.