Java Message Service, ou JMS, é uma API da linguagem Java para middleware orientado a mensagens. Através da API JMS, duas ou mais aplicações podem se comunicar por mensagens.
Arquitetura
A API JMS suporta dois modelos de troca de mensagens:
- ponto a ponto ou modelo de filas
- modelo publish/subscribe
Modelo ponto a ponto
No modelo ponto a ponto, ou por filas, um "produtor" (producer) envia mensagens para uma fila e um "consumidor" (consumer) as lê. Neste caso, o produtor conhece o destino da mensagem e a envia diretamente para a fila do consumidor. Este modelo é caracterizado pelo seguinte:
- apenas um consumidor irá ler a mensagem;
- não é necessário que o produtor esteja em execução no momento em que o consumidor lê a mensagem, assim como não é necessário que o consumidor esteja em execução no momento que o produtor envia a mensagem;
- quando lê uma mensagem com sucesso o consumidor envia um aviso (acknowledged) para o produtor.
Modelo publish/subscribe
Este modelo suporta a publicação de mensagens para um determinado tópico de mensagens (message topic). O(s) "assinante(s)" (subscriber) podem registrar interesse em receber ("em assinar") mensagens de um tópico. Neste modelo, nem o "publicador" (publisher) ou o "assinante" sabem um do outro. As características deste modelo são:
- múltiplos consumidores podem ler a mensagem;
- existe uma dependência temporal entre os publicadores e assinantes de um tópico. Um publicador deve criar uma "assinatura" (subscription) para que os assinantes possam receber mensagens. O assinante do tópico deve estar em execução continuamente para receber as mensagens.
Elementos da API JMS
Cliente JMS
Uma aplicação ou objeto Java que produz e consome mensagens. As mensagens são objetos que contém os dados que são transferidos entre os clientes JMS.
Conexão JMS
A partir do momento que uma factory é obtida, conexões para o provedor JMS podem ser criadas. Uma conexão representa a ligação entre a aplicação cliente e a aplicação servidora. Dependendo do tipo da conexão, ela permitirá que os clientes criem sessões para o envio e recebimento de mensagens de filas ou tópicos.
Factory de conexões JMS
É um objeto administrado que a aplicação cliente utiliza para a criação de conexões para o provedor JMS. Normalmente, os clientes obtém as factories através de interfaces portáveis, desta forma, mesmo se as configurações do provedor JMS mudarem, o código do cliente permanece inalterado. Os administradores mantém as configurações em objetos (objetos da classe factory), que são obtidos através de buscas (lookup) na JNDI. Dependendo do tipo da mensagem, o cliente obterá uma factory para tópico ou para fila.
Destino
É um objeto administrado que encapsula a identidade do destino das mensagens, que é onde as mensagens são enviadas e consumidas. Pode ser uma fila ou um tópico. O administrador JMS cria estes objetos, e os usuários os obtém através de buscas na JNDI. Da mesma forma que as factories de conexões, o administrador pode criar dois tipos de classe de destino, fila e tópico.
Consumidor
Um objeto criado através de uma sessão JMS. Ele recebe mensagens de um destino. O consumidor pode receber mensagens de maneira síncrona ou assíncrona de filas ou tópicos.
Produtor
Um objeto criado através de uma sessão JMS. Ele envia mensagens para um destino.
Mensagens
São objetos enviados entre consumidores e produtores de mensagens. Eles contêm um outro objeto que encapsula os dados que serão trafegados pelas mensagens. Uma mensagem possui três partes principais:
- um cabeçalho, contém a rota das mensagens
- um conjunto de atributos opcionais
- o corpo da mensagem que pode conter cinco tipos de mensagens: texto, map, bytes, stream ou objetos
A interface de uma mensagem é extremamente flexível e permite várias formas de customização de conteúdo.
Provedor JMS
Representa uma interface para um software de middleware orientado à mensagens. Ele suporta a interface JMS que é especificada pela Sun Microsystems. Ele é basicamente um adaptador de um middleware.
Software que suportam JMS
Para que uma aplicação possa utilizar JMS, deve haver um provedor que possa gerenciar as sessões e filas. Existem opções comerciais e livres. Dentre as opções livres temos:
Soluções comerciais incluem:
- BEA WebLogic Server da BEA Systems (Acquired by Oracle Corporation in 2008)
- Tibco EMS da TIBCO Software
- FioranoMQ
- GigaSpaces da GigaSpaces Technologies
- iBus da Softwired
- IONA JMS da IONA Technologies
- SeeBeyond ICAN Suite da Sun Microsystems
- IQManager da Sun Microsystems
- JMS+ da webMethods
- SonicMQ da Sonic Software
- WebSphere MQ da IBM
- webMethods Broker JMS da webMethods
Ligações externas
- Introdução ao JMS
- Sparrow, um cliente JMS baseado em JRuby Ensina a enviar e receber mensagens JMS facilmente em aplicações baseadas em JRuby.