Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS

20
Sistemas Distribuídos Comunicação Distribuída – Middleware - JMS Prof. Adriano Teixeira de Souza

description

 

Transcript of Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS

Page 1: Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS

Sistemas DistribuídosComunicação Distribuída – Middleware - JMS

Prof. Adriano Teixeira de Souza

Page 2: Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS

Prof. Adriano Teixeira de Souza

Método de comunicação entre componentes ou aplicações◦ Arquitetura peer-to-peer com serviço centralizado para �

repasse de mensagens recebidas e enviadas◦ Clientes e servidores enviam e recebem mensagens para �

canais administrados por serviço central de mensagens (MOM)

Viabiliza comunicação distribuída com acoplamento fraco◦ Interface genérica: MOM ignora conteúdo e repassa �

qualquer coisa. Formato do conteúdo deve ser conhecido pelas partes

◦ Assíncrona: Comunicação pode ocorrer mesmo que o �cliente e servidor não estejam disponíveis ao mesmo tempo

O que é Messaging

Page 3: Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS

Prof. Adriano Teixeira de Souza

Sistemas de messaging são freqüentemente chamados de Message-Oriented Middleware (MOM)◦ Conceito não é novo: já existiam há algum tempo em �

implementações proprietárias (e incompatíveis)◦ JMS API: solução independente de fabricante para acessar �

serviços MOM a partir de clientes Java

Alguns produtos MOM compatíveis com JMS:◦ Open source: JBossMQ, OpenJMS, JORAM�◦ IBM MQSeries, IPlanet MQ, Bea WebLogic, HP-MS, �

Progress SoniqMQ◦ Mais em: java.sun.com/products/jms/�

Message-oriented Middleware (MOM)

Page 4: Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS

Prof. Adriano Teixeira de Souza

Escalabilidade◦ Para aumentar a capacidade servidora, basta acrescentar

mais servidores (não é preciso mexer nos componentes)◦ Novos clientes podem se conectar para usar mensagens

em outras aplicações◦ Infraestrutura é reutilizada para novas aplicações

Comunicação assíncrona◦ Componentes podem realizar outras tarefas enquanto �

não estão ocupados lidando com requisições ◦ Podem sondar o servidor em busca de novas mensagens

quando estiverem livres (PTP)◦ Podem se cadastrar para, quando houver mensagens

novas, receber notificação (pub/sub)

Vantagens dos MOMs

Page 5: Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS

Prof. Adriano Teixeira de Souza

Desacoplamento◦ Maior modularidade, maior reuso (substituibilidade), �

maior simplicidade, maior robustez (falhas localizadas)◦ Papéis bem definidos simplificam o desenvolvimento: �

produtor, consumidor e serviço tem única interface, independente da aplicação

◦ Servidor de messaging é responsável pela qualidade do �serviço (não é preocupação dos componentes)

Flexibilidade◦ API definida pelo tipo das mensagens (e não por �

interfaces)◦ Meio comum é a mensagem: se componentes a �

entendem, o resto (linguagens, plataformas, etc.) não importa

Vantagens dos MOMs

Page 6: Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS

Prof. Adriano Teixeira de Souza

Desvantagens◦ Camada adicional para repasse de mensagens � �◦ Centralização em único ponto introduz risco de falha de

todo o sistema caso o serviço de mensagens falhe Solução: replicação, clustering

Desvantagens relativas◦ Muito genérica: aplicações precisam decifrar as

mensagens para que possam operar; esconde a interface de programação remota dentro das mensagens

◦ �Comunicação assíncrona (geralmente): dificulta a criação de aplicações que necessitam de comunicação síncrona.

◦ Não faz tratamento de representação de dados (data �marshalling) - MOM é apenas meio de transporte

Desvantagens dos MOMs

Page 7: Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS

Prof. Adriano Teixeira de Souza

Messaging Mensagens são uma alternativa a invocação

de métodos remotos.

A idéia é inserir uma camada entre o cliente e o servidor

Aplicação Aplicação

Invocação de método remoto

Messaging

Aplicação AplicaçãoMessage

Middleware

Page 8: Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS

Prof. Adriano Teixeira de Souza

Messaging

Vantagens

◦ Processos não bloqueáveis

◦ Garantia de entrega

◦ Suporte a múltiplos emissores e receptores

Page 9: Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS

Prof. Adriano Teixeira de Souza

JMS – Java Message Service JMS é um padrão para Messaging

Tem como objetivo eliminar muitas das desvantagem que MOMs encontraram com o passar dos anos

O Desenvolvedor aprende a usar a API de JMS e reusa seu código com diferentes implementações plugáveis de MOM (idéia similar APIs do JEE, como JNDI e JDBC)

Page 10: Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS

Prof. Adriano Teixeira de Souza

Domínios de Mensagens

Publish/subscribe(pub/sub)

◦ Análogo a assistir televisão. Pode haver muitos produtores de mensagens e muitos consumidores.

Produtor 1 Consumidor 1

Canal

Consumidor 2Produtor 2

Page 11: Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS

Prof. Adriano Teixeira de Souza

Domínios de Mensagens

Produtor 1

Consumidor 1Fila

Produtor 2

Point-to-point(PTP)

◦ Múltiplos produtores podem enviar mensagens para a fila mas cada mensagem é entregue a apenas um consumidor

Page 12: Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS

Prof. Adriano Teixeira de Souza

Usando a API JMS Passos

◦ 1. Localizar o provedor JMS, instancia de ConnectionFactory

◦ 2. Criar um conexão JMS◦ 3. Criar uma Sessão JMS◦ 4. Localizar o destino◦ 5. Criar um JMS Provider ou um JMS Consumer◦ 6. Enviar ou Receber suas mensagens

Page 13: Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS

Prof. Adriano Teixeira de Souza

Cliente

JNDI

Serviço de nomes

1. Obter o Driver JMS (ConnectionFactory)

4. Obter o destino JMS

2. Criar conexão

3. Criar sessão

5. Criar producer ou consumer

6. Enviar ou receber mensagens

JMS Connection Factory

JSM Connection

JMS Session

JSM Prosucer ou Consumer

Driver JMS do cliente

Servidor JMS

6. Enviar ou receber mensagens

Fila1

Fila2

Tópico1

Page 14: Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS

Prof. Adriano Teixeira de Souza

Exemplo public static void main (String[] args) throws Exception { TransportConfiguration transportConfiguration =

new TransportConfiguration(NettyConnectorFactory.class.getName());

ConnectionFactory factory = (ConnectionFactory)HornetQJMSClient.createConnectionFactoryWithoutHA(

JMSFactoryType.CF, transportConfiguration); //O nome da queue deve ser o nome do jms-queue em standalone.xml Queue queue = HornetQJMSClient.createQueue("testQueue"); Connection connection; try { connection = factory.createConnection(); Session session = connection.createSession(false,

QueueSession.AUTO_ACKNOWLEDGE); MessageProducer producer = session.createProducer(queue); TextMessage message = session.createTextMessage(); message.setText("Hello EJB3 MDB Queue!!!"); producer.send(message); session.close(); connection.close(); } catch (JMSException e) {

e.printStackTrace(); } }

Page 15: Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS

Prof. Adriano Teixeira de Souza

Messsage-Driven Beans O que são?

◦ Introduzido na especificação EJB 2.0

◦ São componentes EJBs especiais capazes de receber mensagens enviadas a filas e canais JMS

◦ Invocados pelo Container dada a chegada de um mensagem ao destino que um MDB escuta Não se envia uma mensagem direto a um MDB(envia-

se ao canal que o bean escuta) Proporcionando acoplamento fraco entre cliente e MDB

(conhecimento do canal de comunicação)

Page 16: Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS

Prof. Adriano Teixeira de Souza

Messsage-Driven Beans

◦ Para efetuar a comunicação é necessário o uso de uma API específica, como JMS

Cliente Destino JMS

Instancias de Message-Driven

Beans

Pool de MDBs

Page 17: Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS

Prof. Adriano Teixeira de Souza

Messsage-Driven Beans Características

◦ Não possuem interface home, local home, interface remota, nem interface local

◦ Possuem apenas um método que recebe qualquer tipo de mensagem

◦ Não têm retorno, e também não lançam exceções ao cliente

◦ São Stateless◦ Podem ser ouvintes de uma fila, ou assinantes

de um canal(Topic)

Page 18: Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS

Prof. Adriano Teixeira de Souza

MDBs devem implementar a interface:◦ javax.jms.MessageListener

Método de MessageListener ◦ onMessage(Message m): chamado cada vez que uma

mensagem é enviada para o canal do bean (se o bean estiver ativado).

Messsage-Driven Beans

Page 19: Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS

Prof. Adriano Teixeira de Souza

Implementando MDBs @MessageDriven(name = "MessageMDBSample",

activationConfig = { @ActivationConfigProperty(propertyName = "destinationType",

propertyValue = "javax.jms.Queue"),

@ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/test"),

})public class MDBSample implements MessageListener {

public void onMessage(Message message) {

TextMessage tm = (TextMessage) message;

try {

System.out.println("Received message "+tm.getText());

} catch (Exception e) { e.printStackTrace(); } }}

Page 20: Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS

Prof. Adriano Teixeira de Souza

Como funciona um MDB Tipos de mensagens:

Tipo de Mensagem

Estrutura de dados compatível

TextMessage java.lang.String

ObjectMessage objeto Java serializável

BytesMessage array de bytes

StreamMessage stream de tipos primitivos Java (int, double, char, etc.)

MapMessage

Conjunto de pares name-value. Os valores tem que ser tipos primitivos Java ou

seus encapsulamentos OO (wrappers), como Integer, Float, etc.