Estou tentando entender o que o JMS e como ele está conectado à terminologia do AMQP. Eu sei que o JMS é uma API e o AMQP é um protocolo.
Aqui estão minhas suposições (e perguntas também)
- O RabbitMQ usa o protocolo AMQP (implementa o protocolo AMQP)
- Os clientes Java precisam usar as bibliotecas de clientes do protocolo AMQP para conectar / usar o RabbitMQ
- Onde a API JMS entra em jogo aqui? A API JMS deve usar as bibliotecas do cliente AMQP para conectar-se ao RabbitMQ?
- Normalmente, usamos o JMS para conectar os intermediários de mensagens como RabbitMQ, ActiveMQ, etc. Então, qual é o protocolo padrão usado aqui em vez do AMQP?
Algumas das opções acima podem ser idiotas. :-) Mas tentando envolver minha cabeça nisso.
Respostas:
Sua pergunta é um pouco confusa e se assemelha a uma pergunta difícil em um documento de perguntas :) (Como os professores sempre tentam fazer perguntas simples que tornam complexas: Espero que você não seja um professor :)) Vamos ver todos esses um por um.
Como você sabe:
A API Java Message Service (JMS) é uma API Java Message Oriented Middleware (MOM) para enviar mensagens entre dois ou mais clientes . O JMS faz parte da Java Platform, Enterprise Edition e é definido por uma especificação desenvolvida no Java Community Process como JSR 914. É um padrão de mensagens que permite que os componentes de aplicativos baseados no Java Enterprise Edition (Java EE) criem, envie, receba e leia mensagens. Ele permite que a comunicação entre diferentes componentes de um aplicativo distribuído seja pouco acoplada, confiável e assíncrona .
Agora (da Wikipedia ):
E a coisa mais importante (novamente da Wikipedia):
Algumas coisas importantes que você deve saber:
Boa sorte :)
fonte
I am not sure but I believe that AMQP also uses HTTP/S protocol but AMQP is enhacement is messaging protocol over HTTP
: Não. Isso não está correto.JMS uses simple HTTP but for RabbitMQ/ActiveMq, they uses enhanced protocol.
: Não. Isso não está correto. JMS é apenas uma especificação de API. Ele não usa nenhum protocolo. Um provedor JMS (como ActiveMQ) pode estar usando qualquer protocolo subjacente para realizar a API JMS. Por exemplo: o Apache ActiveMQ pode usar qualquer um dos seguintes protocolos: AMQP, MQTT, OpenWire, REST (HTTP), RSS e Atom, Stomp, WSIF, WS Notification, XMPP.Vamos começar da base.
O RabbitMQ é um MOM (Message Oriented Middleware), desenvolvido com o Erlang (uma linguagem de programação orientada para TLC) e implementando o protocolo de conexão AMQP (Advance Message Queuing Protocol). Atualmente, muitas APIs de clientes (por exemplo, Java, C ++, RESTful etc.) estão disponíveis para permitir o uso dos serviços de mensagens RabbitMQ.
JMS (Java Messaging Service) é um padrão JCP que define um conjunto de APIs estruturadas a serem implementadas por um MOM. Um exemplo de MOM que implementa (ou seja, é compatível com) as APIs JMS é ActiveMQ; há também o HornetMQ e outros. Esses middlewares obtêm as APIs JMS e implementam os padrões de troca adequadamente.
De acordo com o exposto acima, considerando o esqueleto das APIs JMS, uma instância do RabbitMQ e suas APIs Java Client, é possível desenvolver uma implementação JMS utilizando o RabbitMQ: a única coisa que se deve fazer nesse momento é implementar o padrão de troca (acima de RabbitMQ) de acordo com a especificação JMS.
A chave é: um conjunto de APIs, como JMS, pode ser implementado independentemente da tecnologia (neste caso, RabbitMQ).
fonte
O JMS, quando foi definido, não definiu um protocolo entre o cliente JMS e um servidor de mensagens. O cliente JMS, que implementa a API JMS, pode usar qualquer protocolo para se comunicar com o servidor de mensagens. O cliente só precisa estar em conformidade com a API do JMS. Isso é tudo. Geralmente, os clientes JMS usam um protocolo personalizado que seu servidor de mensagens compreende.
O AMQP, por outro lado, é um protocolo entre um cliente de mensagens e um servidor de mensagens. Um cliente JMS pode usar o AMQP como o protocolo para se comunicar com o servidor de mensagens. E há clientes assim disponíveis.
http://www.lshift.net/blog/2009/03/16/openamqs-jms-client-with-rabbitmq-server
fonte
O JMS é uma API, portanto, algumas APIs do JMS são implementadas no protocolo AMQP (como o Apache QPID JMS ), enquanto a maioria das APIs do JMS usa outros protocolos. Se a versão do protocolo AMQP for a mesma, esse cliente poderá se comunicar com outro cliente AMQP.
Depende da sua configuração dessa API JMS. Para ActiveMQ, poderia ser AMQP, mas por padrão é 'openwire'
fonte
Quero sugerir um artigo, isso me ajudou muito a entender melhor qual é a diferença entre AMQP e JMS.
Aqui está o link para o artigo: http://www.wmrichards.com/amqp.pdf
fonte
https://spring.io/understanding/AMQP
fonte
Eu suspeito que você possa estar procurando esta documentação que diz, em parte:
fonte