• Nenhum resultado encontrado

Filas de Mensagens. Razões para usar Filas de Mensagens

N/A
N/A
Protected

Academic year: 2021

Share "Filas de Mensagens. Razões para usar Filas de Mensagens"

Copied!
21
0
0

Texto

(1)

8/28/2003 José Alves Marques

Filas de Mensagens

Message Oriented Middleware - MOM

Departamento de Engenharia Informática

Razões para usar Filas de Mensagens

• Comunicação

– Permite que a comunicação se processe mesmo quando

o servidor não está conectado à rede

– Funcionamento assíncrono permite distribuir carga e

ganhar eficiência

• Modelos de Comunicação

– Modelo de comunicação diferente:

publicação/subscrição

– Permite modelos de comunicação 1 para muitos e

muitos para muitos.

(2)

8/28/2003 José Alves Marques

Aspectos negativos a considerar

• A comunicação assíncrona implica um modelo de

programação mais difícil (programação por

eventos).

• Os servidores de filas de mensagens são mais um

custo de investimento e de suporte

Departamento de Engenharia Informática

Emissor

Emissor

Emissor

Emissor

Receptor

Receptor

Receptor

Receptor

fila

fila

fila

fila

Rede

(3)

8/28/2003 José Alves Marques

Integração por Mensagens – Message Oriented

Middleware

A integração é feita através do encaminhamento de informação (mensagens) entre os

sistemas.

As aplicações recebem e enviam as mensagens para um servidor central (broker).

As mensagens uma vez recebidas pelo broker podem ser reformatadas, combinadas ou

modificas por forma a serem entendidas pelo sistema de destino.

Normalmente não é necessário modificar os sistemas envolvidos. Os Message Brokers

fornecem adaptadores para as aplicações mais comuns (SAP, Baan, PeopleSoft, etc.).

Departamento de Engenharia Informática

Objectivos Genéricos dos MOM

Store and forward

Broker de mensagens

Subscrição e Publicação

Garantia de entrega

Sequência de mensagens

Routing simbólico

Funcionamento em Pedido-Resposta

Mensagens de eventos

Transformação de mensagens

Destinos ad-hoc

Resolução de excepções

Normalização

Transferência de ficheiros

Segurança

(4)

8/28/2003 José Alves Marques

Características MOM (I)

• Store Forward

– A mensagem deve ser aceite pelo serviço de mensagens e e armazenada

até que o receptor ou receptores estejam disponíveis para a receberem

– O emissor deve ser imediatamente desbloqueado depois da mensagem ter

sido aceite para envio (funcionamento assíncrono)

– As Mensagens são armazenadas de forma persistente pelo middleware

• Broker de mensagens

– Para além de uma comunicação ponto-a-ponto, o sistema efectua a

distribuição de mensagens permitindo o envio de mensagens de uma

aplicação para um conjunto de outras que se executam em diversos

sistemas.

• Subscrição e Publicação

– O modelo de comunicação é organizado em torno de tópicos. Os

receptores interessados subscrevem o tópico e recebem todas as

mensagens ou aplicam um filtro de selecção

Departamento de Engenharia Informática

(5)

8/28/2003 José Alves Marques

Características MOM (II)

• Garantia de entrega

– O mecanismo deve garantir a entrega da mensagem ao receptor(es)

– A entrega deve ser exactamente uma vez (não pode ser duplicada)

– A aplicação que envia a mensagem tem esta garantia de qualidade

de serviço pelo que não necessita de verificar a entrega

• Sequência das mensagens

– A sequência de envio das mensagens de um emissor deve ser

respeitada, garantido a ordenação dos acontecimentos que as

mensagens representam.

– Evita que as aplicações se preocupem com a ordem.

• Routing simbólico

– O endereçamento das mensagens baseia-se em nomes simbólicos

virtualizando a rede de comunicações

Departamento de Engenharia Informática

Características MOM (III)

• Pedido-resposta

– Muitas interacções baseiam-se num pedido e numa resposta.

Comportamento que á a base da chamada remota de procedimentos

– O emissor poderia especificar o endereço de resposta mas este estaria

dependente da organização da rede. A infraestrutura pode encarregar-se de

fazer o emparelhamento, permitindo que a resposta provenha de uma outra

aplicação

• Eventos

– Assinalam acontecimento que podem ter origem dentro ou fora do sistema

– Permitem alterar o fluxo dos processos

• Transformação de mensagens

– Possibilidade de aceitar mensagens com formatos predefinidos e

transformá-las para o formato do receptor.

– Permite que as integrações não estejam dependentes de um formato de

aplicações herdadas

(6)

8/28/2003 José Alves Marques

Pipelines

Decrypt

Decrypt ParseParse ResolveResolve Party Party

Message

Message

Box

Box

Serialize

Serialize SignSign

Encrypt

Encrypt

Transporte

Transporte

Transporte

Transporte

Pipeline Recepção

Pipeline Envio

Orquestração

Departamento de Engenharia Informática

Características MOM (IV)

• Resolução de excepções

– A infraestrutura deve tentar tratar os erros habituais como os de

comunicação

– Deve assinalar os acontecimentos que envolvam quebra da semântica:

impossível de entregar, “exactamente –uma-vez” não respeitado, etc.

• Transferência de ficheiros

– A maioria das mensagens devem ser relativamente pequenas, contudo a

infra-estrutura deve poder enviar ficheiros de dimensão grande entre

aplicações porque muitas integrações são feitas com ficheiros

• Segurança

– A segurança tem de ser considerada a dois níveis

• Dentro da organização

• Com sistemas externos

(7)

8/28/2003 José Alves Marques

Exemplo de MOM

Java Messages

Departamento de Engenharia Informática

Java Messaging Service - JMS

• Elementos da infraestrutura

– Filas de mensagens

– Envio e recepção de mensagens

• Mensagens ponto a ponto

• Subscrição e publicação de mensagens

– Formato das Mensagens

– API em Java

(8)

8/28/2003 José Alves Marques

Envio e Recepção de Mensagens

• As aplicações falam com o message broker através de uma

connection

• Dentro de uma connection um processo pode ter várias

sessions para cada uma das suas tarefas (threads)

• As mensagens podem ser:

– Stream – sequência de tipos básicos de Java

– Texto – na qual se incluem documentos XML

– Objectos – objectos Java serializados

– Bytes

Departamento de Engenharia Informática

Envio das Mensagens

• Ponto a Ponto

– A designação pode confundir. Neste caso quer dizer que a

aplicação define a queue para onde envia a mensagem.

– A aplicação deve obter a referência para a queue através de um

serviço de nomes (JNDI)

– O sistema passa automaticamente a referência para a queue de

resposta

• Publicar e Subscrever

– As mensagens não são enviadas para um destinatário mas para um

tópico

– As mensagens podem ser consideradas eventos que são

comunicados aos destinatários interessados no tópico

– O subscritor do tópico pode ser durable, caso em que as mensagens

são armazenadas enquanto está inactivo

(9)

8/28/2003 José Alves Marques

Filas de mensagens e transacções

• A garantia de entrega é assegurada pelas filas de mensagens serem

persistentes

• Para assegurar a semântica exactamente-uma–vez as JMS queues

podem ser opcionalmente transaccionais (transacted) através de um

parâmetro na criação da sessão

• O transaccional existe quer do lado do envio quer da recepção.

– No envio a mensagem só é considerada como estando na fila quando a

aplicação faz commit

– Na recepção, se a aplicação ou o commit falham a mensagem permanece

na fila até a aplicação a voltar a ler.

• Uma Session está sempre associada a uma transacção corrente, não há

begin; commit e rollback porque uma transacção automaticamente

começa outra

• O JMS não implementa transacções distribuídas

Departamento de Engenharia Informática

Formato da Mensagem

• O JMS não define uma

norma para as

mensagens pelo que

produtos do tipo JMS

podem ter formatos

diferentes

• Mas define um

formato de mensagem

abstracto que define a

informação que deve

existir numa

(10)

8/28/2003 José Alves Marques

API do JMS

• Modelo de objectos que considera:

– Queue connection factory

– Queue Connection

– Queue session – uma para cada thread

• Modelo

• Encontrar uma ConnectionFactory através do JNDI

• Encontrar uma Destination através do JNDI

• Usar a Connection Factory para criar uma Connection

• Usar a Connection para criar uma ou mais Sessions

• Usar a Session e a Destination para criar o MessageProducer e

MessageConsumer

• Iniciar a Connection

Departamento de Engenharia Informática Application Queue ConnectionFactory ConnectionQueue SessionQueue MessageText Queue Sender ReceiverQueue

createQueueConnection createQueueSession createSender (queue) createReceiver (queue) Start() creatTextMessage () setText(messagetext) Send(message) Receive()

(11)

8/28/2003 José Alves Marques

Exemplo JMS(I)

public class Hello {

public static void main(String[] args) { try {

/* Declaração das variáveis JMS */

QueueConnectionFactory queueConnectionFactory = null; QueueConnection queueConnection = null;

Queue queue = null;

QueueSession queueSession = null; QueueSender queueSender = null; QueueReceiver queueReceiver = null; TextMessage textMessage = null; Message message = null;

/* Declaração de variáveis para argumentos da linha de comando */ final String MQ_HOST_NAME;

final String MQ_HOST_PORT;

/* Validação dos argumentos recebidos na linha de comando */ if ( args.length < 2 ) {

Definição da localização do

Message broker

Departamento de Engenharia Informática

Exemplo JMS(II)

System.out.println("Usage: java Hello <mq_host_name> <mq_host_port>"); System.exit(1);

}

MQ_HOST_NAME = args[0]; MQ_HOST_PORT = args[1];

System.out.println("Message queue host is " + MQ_HOST_NAME + ":" + MQ_HOST_PORT);

/* Instanciação de uma fábrica de ligações */

/* Instancia-se directamente a classe Sun MQ para poder usar os métodos para definir nome e porto do servidor de mensagens */

com.sun.messaging.QueueConnectionFactory sunQueueConnectionFactory = new com.sun.messaging.QueueConnectionFactory();

sunQueueConnectionFactory.setProperty("JMQBrokerHostName", MQ_HOST_NAME); sunQueueConnectionFactory.setProperty("JMQBrokerHostPort", MQ_HOST_PORT); queueConnectionFactory = sunQueueConnectionFactory;

/* Criação de uma ligação ao servidor de mensagens */

queueConnection = queueConnectionFactory.createQueueConnection();

/* Criação de uma sessão dentro da ligação estabelecida */

queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

Indica que a Session não é Transaccional

(12)

8/28/2003 José Alves Marques

Exemplo JMS(III)

/* Instanciação de uma fila de mensagens com o nome especificado */ /* A fila é criada implicitamente no servidor, caso não exista */ queue = new com.sun.messaging.Queue("world");

/* Criação do produtor de mensagens */

queueSender = queueSession.createSender(queue); /* Criação e envio de uma mensagem */

textMessage = queueSession.createTextMessage(); textMessage.setText("Hello World");

System.out.println("Sending Message: " + textMessage.getText()); queueSender.send(textMessage);

/* Neste exemplo muito simples é o mesmo programa a enviar e a receber a mensagem */

/* Criação de um consumidor de mensagens a partir da fila */ queueReceiver = queueSession.createReceiver(queue);

Departamento de Engenharia Informática

Exemplo JMS(IV)

/* Reiniciação da ligação */

queueConnection.start();

/* Recepção de mensagem e análise do conteúdo */

message = queueReceiver.receive();

if (message instanceof TextMessage) { textMessage = (TextMessage) message;

System.out.println("Read Message: " + textMessage.getText()); }

/* Fecho da sessão e da ligação */ queueSession.close();

queueConnection.close(); } catch (Exception e) {

/* À falta de melhor tratamento de erro, é pelo menos conveniente imprimir a excepção */ System.out.println("Exception occurred : " + e.toString());

}

System.out.println("Finished"); }

(13)

8/28/2003 José Alves Marques

Exemplo: receptor Assíncrono (I)

public class AsynchReceiver {

public static void main(String[] args) { int exitResult = 0;

String queueName = null;

/* Declaração das variáveis JMS */

QueueConnectionFactory queueConnectionFactory = null; QueueConnection queueConnection = null;

QueueSession queueSession = null; Queue queue = null;

QueueReceiver queueReceiver = null; TextListener textListener = null;

/* Declaração de variáveis para argumentos da linha de comando */ final String MQ_HOST_NAME;

final String MQ_HOST_PORT;

/* Validação dos argumentos recebidos na linha de comando */ if (args.length != 3) {

System.out.println("Usage: java AsynchReceiver <mq_host_name> <mq_host_port> <queue_name>");

System.exit(1);

Departamento de Engenharia Informática

Exemplo: receptor Assíncrono (II)

MQ_HOST_NAME = args[0];

MQ_HOST_PORT = args[1];

System.out.println("Message queue host is " + MQ_HOST_NAME + ":" + MQ_HOST_PORT); queueName = new String(args[2]);

System.out.println("Queue name is " + queueName); /* Criar uma fábrica de ligações,

criar uma ligação,

criar uma sessão a partir da ligação (false indica que não é transaccional), criar uma fila de mensagens */

try { com.sun.messaging.QueueConnectionFactory sunQueueConnectionFactory = new com.sun.messaging.QueueConnectionFactory(); sunQueueConnectionFactory.setProperty("JMQBrokerHostName", MQ_HOST_NAME); sunQueueConnectionFactory.setProperty("JMQBrokerHostPort", MQ_HOST_PORT); queueConnectionFactory = sunQueueConnectionFactory; queueConnection = queueConnectionFactory.createQueueConnection(); queueSession = queueConnection.createQueueSession(false,

(14)

8/28/2003 José Alves Marques

Exemplo: receptor Assíncrono (III)

} catch (Exception e) {

System.out.println("Connection problem: " + e.toString()); if (queueConnection != null) {

try {

queueConnection.close(); } catch (JMSException ee) { }

}

System.exit(1); }

/* Criar consumidor de mensagens,registar o tratamento de mensagens (TextListener) e iniciar a recepção de mensagens. O 'listener' escreve as mensagens obtidas. O programa fica bloqueado até o 'listener' receber a mensagem final e efectuar o desbloqueio. */

try {

queueReceiver = queueSession.createReceiver(queue); textListener = new TextListener();

queueReceiver.setMessageListener(textListener);

/* Iniciar a ligação */ queueConnection.start();

/* Aqui o programa está livre para ir fazer qualquer outra coisa

Departamento de Engenharia Informática

Exemplo: receptor Assíncrono (IV)

/* Quando não houver mais nada para fazer,

vai bloquear-se para esperar o fim da recepção de mensagens */ textListener.monitor.waitTillDone();

} catch (JMSException e) {

System.out.println("Exception occurred: " + e.toString()); exitResult = 1; } finally { if (queueConnection != null) { try { queueConnection.close(); } catch (JMSException e) { exitResult = 1; } } } System.out.println("Finished"); System.exit(exitResult); } }

(15)

8/28/2003 José Alves Marques

Função que trata as mensagens assíncronas

public class TextListener implements MessageListener {

final DoneLatch monitor = new DoneLatch();

/* método invocado no Listener de mensagens quando chega uma mensagem nova */ public void onMessage(Message message) {

if (message instanceof TextMessage) { TextMessage msg = (TextMessage) message; try {

System.out.println("Reading message: " + msg.getText()); } catch (JMSException e) {

System.out.println("Exception in onMessage(): " + e.toString()); }

} else {

/* A mensagem que não é de texto indica o fim da sequência. Acorda quem esteja à espera */

monitor.allDone(); }

} }

Departamento de Engenharia Informática

(16)

8/28/2003 José Alves Marques

Microsoft Message Queues

Departamento de Engenharia Informática

MSMQ - História

• MSMQ was designed and developed by a Microsoft developement

team in Haifa, Israel.

• MSMQ version 1.0 was shipped with the NT Option pack.

– In this version MSMQ was integrated with SQL Server. The programming

model was easy but the Installation and management was cumbersome.

• MSMQ version 2.0 shipped as an optional windows component with

Windows 2000.

– Active Directory was born, MSMQ was quick to grab the opportunity to

replace SQl-server dependency with AD.

• MSMQ version 3.0 shipped as an optional windows component with

WinXP and Windows 2003.

– Major new features like HTTP protocol support, Multicasting support,

Distribution lists, etc were introduced. Security and reliability of the

product was greatly enhanced in version 3.0

(17)

8/28/2003 José Alves Marques

Microsoft Message Queues

Envio da mensagem

MessageQueue MyMessageQ; Message MyMessage;

MyMessageQ = new MessageQueue(txtQueuePath.Value); MyMessage = new Message(txtMessageToSend.Value); MyMessageQ.Send(MyMessage);

Recepção da Mensagem

MessageQueue MyMessageQ; Message MyMessage;

MyMessageQ = new MessageQueue(QueuePath); MyMessage = MyMessageQ.Receive;

WriteStatus("Message Received!"); DoSomeLongRunningProcess(); WriteStatus("Processing Finished!");

Departamento de Engenharia Informática

(18)

8/28/2003 José Alves Marques

Enterprise Application Integration

Departamento de Engenharia Informática

(19)

8/28/2003 José Alves Marques

EAI na Arquitectura Tecnológica

Cap 10

Departamento de Engenharia Informática

EAI baseado em Filas de Mensagens

Agregam as funcionalidades dos message

brokers com a possibilidade de execução

de processos de negócio transversais às

várias aplicações, dentro e fora de uma

organização.

A arquitectura integração por camadas

típica compreende serviços comuns

(segurança, repositório, etc.), um bus de

mensagens, adaptadores, transformação

de mensagens, gestão de processos e

portais de informação.

(20)

8/28/2003 José Alves Marques

Funcionalidade “típica” de um EAI

• Armazenamento de mensagens – Guarda persistentemente as

mensagens que chegam ao message broker. Dá suporte a mining de

mensagens, armazenamento de mensagens e auditorias.

• Transformação de mensagens – Converte uma mensagem de entrada

para um formato que permita ser enviada para outro sistema.

• Processamento de regras – Permite definir regras utilizadas no

processamento e encaminhamento das mensagens.

• Re-encaminhamento inteligente – Capacidade de re-enviar uma

mensagem de acordo com o seu conteúdo e a sua origem.

• Serviços de repositório – Mantém informação sobre as aplicações de

origem e destino das mensagens.

• Adaptadores – Camada de software que faz a ligação entre o message

broker e as aplicações mais habituais

Departamento de Engenharia Informática

(21)

8/28/2003 José Alves Marques Technology Adapter Technology Adapter

Messaging Bus

Messaging Bus

Routing Services

Routing Services

Declarative Routing

Declarative Routing Content BasedContent Based Publish/SubscribePublish/Subscribe Application Adapter

Application Adapter

Biztalk - Architectural Overview

Receive Services

Receive Services

HTTP

HTTP SMTPSMTP MSMQMSMQ MQSeriesMQSeries File File WebWeb Service

Service

Application A

Application A Application BApplication B Application CApplication C

Application D

Application D Application EApplication E Application FApplication F Application Adapter Application Adapter

Delivery Services

Delivery Services

Business

Business

Process

Process

Transformation Services

Transformation Services

XML

Referências

Documentos relacionados

Classificação de Perigo do Produto Químico e o Sistema de Classificação Utilizado: Produto não enquadrado na portaria em vigor sobre transporte de produtos

Com os resultados parciais podemos observar que quanto maior o grau de disfunção erétil, maior o grau de depressão no paciente, e isso mostra que o estudo está no caminho certo

A fisioterapia é de extrema importância ma reabilitação de pacientes com paraparesia, auxiliando na prevenção de deformidades, maior independência funcional,

É possível identificar que os pesquisadores realizam constantemente a aproximação entre as duas temáticas, o que torna clara a percepção da economia solidária como forte

Pode-se concluir que apesar de não existir um consenso de ponto de corte especifico para os idosos o ponto de corte da Organização Mundial da Saúde foi o mais utilizado nos

Buscou-se o aprofundamento da importância do saneamento básico, da utilização de água residuária para fins hidroagrícolas, bem como da proteção do meio ambiente, além da

Os valores de potássio com potencial de liberação Ko foram maiores para os resíduos esterco de galinha, esterco de codorna, esterco de eqüino e composto orgânico, independentemente

Dessa forma, os documentos foram analisados quanto aos tipos de projetos residenciais que se aplicam (Triagem); quais são os conteúdos mínimos indicados para