JMS

Origem: Wikipédia, a enciclopédia livre.

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:

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:

  1. um cabeçalho, contém a rota das mensagens
  2. um conjunto de atributos opcionais
  3. 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:

Ligações externas[editar | editar código-fonte]