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

A API JMS suporta dois modelos de troca de mensagens:

Modelo ponto a ponto editar

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

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

Cliente JMS editar

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

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

É 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 editar

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

Um objeto criado através de uma sessão JMS. Ele envia mensagens para um destino.

Mensagens editar

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

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

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