Java Message Service (JMS) Disciplina de Sistemas Distribuídos Prof. Cristiano André da Costa Luiz Henrique Feltes
Roteiro Introdução; Arquitetura; Vantagens / Desvantagens; Componentes do JMS; Códigos fonte de exemplo; Comparação do JMS com RMI/RPC; Considerações finais. 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 viceversa; 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 Fila Consumidor 1 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 Produtor 2 Consumidor 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
Componentes do JMS A mensagem JMS é composta de três partes: Cabeçalho Propriedades Corpo 23
Componentes do JMS Cabeçalho: Está presente em todas as mensagens; Informações de identificação e direcionamento das mensagens; Produzido pela aplicação produtora de mensagem; 24
Componentes do JMS 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; 25
Componentes do JMS Corpo: Define o tipo de mensagem. Existem 6 tipos de mensagens: TextMessage; MapMessage; BytesMessage; StreamMessage; ObjectMessage; 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/s ervice_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ídos Prof. Cristiano André da Costa Luiz Henrique Feltes