Java Message Service (JMS) Disciplina de Sistemas Distribuídos Prof. Cristiano André da Costa Luiz Henrique Feltes
Java Message Service (JMS)
Disciplina de Sistemas DistribuídosProf. Cristiano André da Costa
Luiz Henrique Feltes
• Introdução;
• Arquitetura;
• Vantagens / Desvantagens;
• Componentes do JMS;
• Códigos fonte de exemplo;
• Comparação do JMS com RMI/RPC;
• Considerações finais.
Roteiro
2
Introdução
• MOM (Message Oriented Middleware)
• Comunicação entre aplicações por troca de mensagens;
• Portabilidade, interoperabilidade;
• Reduz a complexidade da implementação de comunicação das aplicações;
3
Introdução
4
Introdução
• Um exemplo de uso do MOM:
• Montadora precisa distribuir uma lista de preço a todas as concessionárias;
• Se a comunicação fosse por exemplo com RMI/RPC, montadora e concessionária deveriam estar conectadas no momento;
5
Introdução
• Um exemplo de uso do MOM:
• No caso do MOM, a montadora produz uma mensagem com a nova lista, sem necessidade de estar conectada as concessionárias;
• O MOM fica encarregado de entregar a mensagem as concessionárias, quando estiverem disponíveis para receber;
6
Introdução
• JMS (Java Message Service) – API Java J2EE;
• Duas ou mais aplicações podem se comunicar por mensagens;
• A troca de mensagem é de forma assíncrona;
• Possibilidade de comunicação a EJBs;
7
Arquitetura
• Existem dois modelos de arquitetura:
• Point-to-Point (ou modelo de filas);
• Publish and Subscribe;
8
Arquitetura
• Point-to-Point
• Analogia: Similar ao envio de uma correspondência;
• Produtor envia mensagens para uma fila e um consumir lê;
• Produtor conhece o destino e envia diretamente para a fila;
9
Arquitetura
• Point-to-Point
• Apenas um consumidor pode ler a mensagem;
• Não é necessário que o produtor esteja conectado quando a mensagem for lida pelo consumidor e vice-versa;
• Quando mensagem é lida com sucesso o consumidor avisa o produtor (acknowledgement);
10
Arquitetura
• Point-to-Point
• Filas retêm mensagens até que sejam consumidas (ou expirem)
Produtor 1
Consumidor 1Fila
Produtor 2
11
Arquitetura
• Point-to-Point
12
Arquitetura
• Publish and Subscribe
• Analogia: Similar ao sistema de assistir canal de TV por assinatura;
• Assinante registra o interesse em receber as mensagens;
• Publicador e assinante não se conhecem;
13
Arquitetura
• Publish and Subscribe
• Muitos para Muitos;
• Mensagens são enviadas para um canal (tópico) onde os assinantes do canal podem retirá-las;
14
Arquitetura
• Publish and Subscribe
• Publicador e o assinante não se conhecem;
Produtor 1 Consumidor 1
Canal
Consumidor 2Produtor 2
15
Arquitetura
• Publish and Subscribe
16
Vantagens
• Escalabilidade:
• Para aumentar a capacidade servidora, basta acrescentar mais servidores, sem alterar os componentes;
• Novos clientes podem se conectar para usar mensagens de outras aplicações;
• Infraestrutura é reutilizada para outras aplicações;
17
Vantagens
• Comunicação assíncrona:
• Componentes podem realizar outras tarefas quando não estão ocupados lidando com as requisições;
• Desacoplamento:
• Maior modularidade, reuso, simplicidade;
• Servidor de messaging é o responsável pelo serviço;
18
Vantagens
• Flexibilidade:
• API é definida pelo tipo de mensagens (não por interface)
• Comunicação é a mensagem, não importa linguagem, plataforma, etc;
19
Desvantagens
• Camada adicional para repassar as mensagens;
• Centralização em um único ponto introduz risco de falha do sistema caso serviço de mensagem falhe;
• Solução: Replicação, clustering;
• Dificulta a criação de aplicações que precisam de comunicação síncronas;
20
Componentes do JMS
• JMS Provider• É o sistema de mensagens em si;
• Cliente JMS• São as aplicações Java que enviam e recebem as mensagens;
• Mensagens• São os objetos enviados para as aplicações clientes;
21
Componentes do JMS
22
• A mensagem JMS é composta de três partes:
• Cabeçalho
• Propriedades
• Corpo
Componentes do JMS
23
• Cabeçalho:
• Está presente em todas as mensagens;
• Informações de identificação e direcionamento das mensagens;
• Produzido pela aplicação produtora de mensagem;
Componentes do JMS
24
• Propriedades:
• É opcional; Pode ser considerada uma extensão do cabeçalho;
• Contém valores que aplicações consumidoras podem utilizar para filtragem das mensagens;
• Podem oferecer informações como: data/hora mensagem foi enviada;
Componentes do JMS
25
• Corpo:
• Define o tipo de mensagem. Existem 6 tipos de mensagens:
• TextMessage;• MapMessage;• BytesMessage;• StreamMessage;• ObjectMessage;
Componentes do JMS
26
Componentes do JMS
27
Componentes do JMS
28
Componentes do JMS
• Tratamento de excessões:
• Exception genérica: JMSException
• Subclasses:• InvalidClientIDException;• InvalidDestinationException;• JMSSecurityExecption;• MessageFormatException;• MessageEOFException;
29
Códigos fonte de exemplo
• Point-to-Point:
• QSender;• QProvider;
• Publish and Subscribe:
• TPublisher;• TSubscriber;
30
Comparação do JMS com RMI/RPC
• JMS• Mensagens são representadas como eventos;• Interface é genérica;• Arquitetura é centralizada (tudo passa pelo MOM);
• RMI/RPC• Mensagens são invocações a métodos;• Aplicação se comunica por uma interface definida;• Comunicação é síncrona;• Aplicações precisam estar conectadas;
31
Considerações finais
• Quando a comunicação depende mais de mensagens do que interface definidas (componentes não dependem da interface de outros componentes);
• Quando a disponibilidade é imprevisível ou aplicação precisa rodar quando nem todos componentes estão acessíveis;
• Quando precisa ter um comportamento assíncrono;
32
Referências
• Kim Haase - JMS API Tutorial -http://download.oracle.com/javaee/1.3/jms/tutorial
• Sun - Java Message Service -http://www.faa.gov/about/office_org/headquarters_offices/ato/service_units/techops/atc_comms_services/swim/documentation/media/compliancy/jms-1_1-fr-spec.pdf
• Helder Rocha -www.argonavis.com.br/cursos/java/j530/j530_9_JMS.pdf
33
Java Message Service (JMS)
Disciplina de Sistemas DistribuídosProf. Cristiano André da Costa
Luiz Henrique Feltes