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
editarA API JMS suporta dois modelos de troca de mensagens:
- ponto a ponto ou modelo de filas
- modelo publish/subscribe
Modelo ponto a ponto
editarNo 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
editarEste 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
editarCliente JMS
editarUma 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
editarA 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É 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É 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
editarUm 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
editarUm objeto criado através de uma sessão JMS. Ele envia mensagens para um destino.
Mensagens
editarSã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
editarRepresenta 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
editarPara 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- 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.