JMS
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
[editar | editar código-fonte]A API JMS suporta dois modelos de troca de mensagens:
- ponto a ponto ou modelo de filas
- modelo publish/subscribe
Modelo ponto a ponto
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]Cliente JMS
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]É 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
[editar | editar código-fonte]É 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
[editar | editar código-fonte]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
[editar | editar código-fonte]Um objeto criado através de uma sessão JMS. Ele envia mensagens para um destino.
Mensagens
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]- 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.