• Nenhum resultado encontrado

Sistemas Empresariais Integrados

N/A
N/A
Protected

Academic year: 2021

Share "Sistemas Empresariais Integrados"

Copied!
30
0
0

Texto

(1)

Sistemas Empresariais Integrados

Tecnologias de messaging

(MSMQ)

Tecnologias de messaging

• Microsoft Message Queuing (MSMQ)

– faz parte do sistema operativo

– infra-estrutura de mensagens e plataforma de

desenvolvimento

– aplicações distribuídas e assíncronas baseadas em

Windows

– oferece garantia de entrega, roteamento eficiente,

segurança, transacções, prioridades, etc.

(2)

• Versão 1.0

– Windows 95/98/Me e Windows NT 4.0

• Versão 2.0

– Windows 2000

• Versão 3.0

– Windows XP e 2003

• Versão 4.0

– Windows Vista e Windows Server 2008

• Versão 5.0

– Windows 7 e Windows Server 2008 R2

Tecnologias de messaging (MSMQ)

• Visão geral

Emissor (sender) Emissor (sender) Emissor (sender) Receptor (receiver) Receptor (receiver) Receptor (receiver) Directory Service (opcional) filas (queues)

(3)

– filas transaccionais vs. não-transaccionais

– entrega rápida vs. recuperável

– roteamento directo vs. store-and-forward

– destino único vs. múltiplos destinos

• queue vs. distribution list

– possibilidade de encriptação e autenticação

Emissor

(sender) destination queue msg

Tecnologias de messaging (MSMQ)

• Receptor (receiver)

– leitura local vs. remota

• preferencialmente local

– filas transaccionais vs. não-transaccionais

– leitura síncrona vs. assíncrona

– peek vs. retrieve

• peek lê mas deixa mensagem na fila

destination queue msg

(4)

• Tipos de filas

– filas criadas pelas aplicações

• fila de destino

• fila de administração (acknowledgments) • fila de resposta (a usar pelo receptor)

• report queues (para tracking de mensagens)

Emissor (sender) Receptor (receiver) destination queue response queue msg1 msg2

Tecnologias de messaging (MSMQ)

• Tipos de filas

– filas usadas pelo sistema MSMQ

• queue journal / computer journal (guardam cópias) • dead-letter queue (mensagens não entregues) • outgoing queues (ligação a filas remotas)

(5)

– filas públicas

• ComputerName\QueueName

– filas privadas

• ComputerName\PRIVATE$\QueueName

– fila na máquina local

• .\QueueName • .\PRIVATE$\QueueName

– sub-filas

• ComputerName\QueueName;Subqueue • ComputerName\PRIVATE$\QueueName;Subqueue

Tecnologias de messaging (MSMQ)

• Serviço de directório

– usado para filas públicas

– implementado por Active Directory (LDAP)

Serviço de directório

Aplicação

filas

(6)

• MSMQ é um sistema de mensagens

– não é só uma interface como o JMS

• os principais objectivos são:

– comunicação assíncrona de mensagens – persistência de mensagens entre aplicações

filas (queues) Message Queuing

Aplicação 1 Aplicação 2

Tecnologias de messaging (MSMQ)

• Interacções suportadas por MSMQ

– mensagens unidireccionais

• 1 fila

– interacções pedido-resposta

• 2 filas: uma para o pedido, outra para a resposta • a fila de resposta é especificada no pedido

• exige o uso de correlação entre pedido e resposta

– mensagens em modo broadcast

(7)

– as filas são mantidas por um Queue Manager

• corre como um serviço separado das aplicações • existe um protocolo de comunicação entre as

aplicações e o queue manager

Emissor (sender) Receptor (receiver) fila (queue) Queue Manager

Tecnologias de messaging (MSMQ)

• Componentes de MSMQ

– MSMQ também suporta a interacção entre queue

managers distintos

– transferência assíncrona de mensagens pela rede

Emissor (sender) Receptor (receiver) fila (queue) Queue Manager fila (queue) Queue Manager

(8)

• Componentes de MSMQ

– quando a fila de destino é remota

• aplicação entrega a mensagem ao queue manager local • queue manager local coloca a mensagem numa fila

(outgoing queue) criada especialmente para o efeito • queue manager local envia a mensagem para queue

manager remoto

• o queue manager remoto entrega a mensagem à aplicação de destino

– pode haver vários queue managers intermédios

Tecnologias de messaging (MSMQ)

• Componentes de MSMQ – queue managers

Emissor (sender) Receptor (receiver) local queue Queue Manager destination queue Queue Manager outgoing queue Optional Interim Queue managers Optional Interim Queue managers Outros queue managers intermédios

(9)

– MSMQ pode usar um Serviço de Directório

Emissor (sender) Receptor (receiver) (opcional) fila (queue) Queue Manager Directory Service

Tecnologias de messaging (MSMQ)

• Componentes de MSMQ

– o serviço de directório permite:

• guardar metadados sobre as filas e sobre o sistema • descobrir as filas (públicas) existentes

• guardar a topologia da rede para roteamento de mensagens

(10)

• Componentes de MSMQ

– também pode haver Coordenador de Transacções

Aplicação (opcional) fila (queue) Queue Manager Transaction Coordinator

Tecnologias de messaging (MSMQ)

• Componentes de MSMQ

– o coordenador de transacções permite:

• estabelecer transacções entre uma aplicação e um queue manager

• gerir o estado da transacção

• aceitar ou recusar mensagens conforme o estado da transacção

(11)

Microsoft, “MS-MQSO: Message Queuing System Overview”, February 2011

Tecnologias de messaging (MSMQ)

• Diagrama de

(12)

• Garantias de entrega

– Best-effort Express Delivery

• at-most-once, com mensagens armazenadas em memória

• sujeito a perda de mensagens por falhas do sistema ou da rede

– Best-effort Delivery

• at-most-once, com mensagens armazenadas de forma persistente pelo queue manager

• sujeito a perda de mensagens por falha da rede

Tecnologias de messaging (MSMQ)

• Garantias de entrega (cont.)

– Exactly-once Delivery

• exactly-once, só com filas transaccionais

• aplicação envia mensagens para a fila no contexto de uma transacção

• dependendo do resultado da transacção, o queue manager aceita e armazena as mensagens

• as mensagens são transferidas entre queue managers até chegarem à fila de destino

(13)

Emissor (sender)

Receptor (receiver)

Source Queue Manager outgoing queue

transactional dead-letter queue

Destination Queue Manager destination queue

Processo de confirmação da transacção

MSMQ

• Transacções

(14)

• Acknowledgments

Emissor (sender) destination queue Queue Manager administration queue Receptor (receiver) msg ack

Tecnologias de messaging (MSMQ)

• Acknowledgments

– com aknowledgments é possível saber

• se a mensagem chegou à fila de destino

– Acknowledgment = ReachQueue

• se a mensagem foi recebida pelo receptor

– Acknowledgment = Receive

– as mensagens de acknowledgment aparecem

numa fila de administração própria

(15)

– também existem acknowledgments negativos

• se a mensagem não chegar à fila de destino • se a mensagem não for recebida pelo receptor

– exemplos

• BadDestinationQueue, BadEncryption, BadSignature, HopCountExceeded, NotTransactionalQueue,

QueueDeleted, QueueExceedMaximumSize, ReachQueueTimeout, ReceiveTimeout, etc.

Tecnologias de messaging (MSMQ)

• Acknowledgments

– tem de haver correlação com a mensagem original

– campos importantes na mensagem de ack.

• MessageType – indica que a mensagem é um acknowledgment

• Acknowledgement – diz qual é o tipo de ack. positivo ou negativo (p.ex. ReachQueue)

• CorrelationId – contém o id da mensagem original a que se refere este ack.

(16)

• Mensagens

– todo o conteúdo são propriedades (nome-valor)

– uma das propriedades é o body

• vazio

• tipos de dados básicos • texto

• objecto serializável • array de bytes

Tecnologias de messaging (MSMQ)

• Propriedades das mensagens

– AcknowledgeType (tipo de acknowledgment desejado)

– Acknowledgement (se a msg for um ack., aqui vem o tipo)

– AdministrationQueue (fila a usar para o acknowledgment)

– ArrivedTime (chegada à fila de destino)

– Body / BodyStream / BodyType – CorrelationId

– DestinationQueue

– Formatter (formatar em XML ou binário)

– Id (identificador único)

(17)

– MessageType (normal, acknowledgement, ou report)

– Priority (determina posição na fila de destino)

– Recoverable (true = persistência)

– ResponseQueue – SenderId

– SentTime – SourceMachine

– TimeToBeReceived (tempo máx. até ser lida no destino)

– TimeToReachQueue (tempo máx. até chegar à fila de destino)

Tecnologias de messaging (MSMQ)

• Propriedades usadas para segurança

– Authenticated (true = mensagem com assinatura)

– DestinationSymmetricKey (chave para [des]encriptar o body) • este campo está encriptado pela chave pública do queue manager

– DigitalSignature (assinatura digital da msg)

– EncryptionAlgorithm

– HashAlgorithm (algoritmo usado para assinar)

(18)

• Como usar MSMQ

– em C# e .NET Framework a API está no namespace

System.Messaging

– verificar se uma fila existe:

string queueName = @".\private$\purchaseorders"; if (MessageQueue.Exists(queueName)) { … }

Tecnologias de messaging (MSMQ)

• Como usar MSMQ

– abrir uma fila que já existe

string queueName = @".\private$\purchaseorders"; MessageQueue mq = new MessageQueue(queueName);

– criar e abrir uma fila que ainda não existe

string queueName = @".\private$\purchaseorders"; MessageQueue mq = MessageQueue.Create(queueName);

(19)

– criar mensagem

Message msg = new Message(...) Message.Body = …

– enviar mensagem

MessageQueue mq = new MessageQueue(queueName); mq.Send(msg);

Tecnologias de messaging (MSMQ)

• Como usar MSMQ

– receber mensagem

MessageQueue mq = new MessageQueue(queueName); Message msg = mq.Receive();

– receber mensagem, mas sem remover da fila

MessageQueue mq = new MessageQueue(queueName); Message msg = mq.Peek();

(20)

• Como usar MSMQ

– receber mensagem assincronamente

1. implementar um método para servir de event handler (callback)

2. adicionar o método como handler para o evento ReceiveCompleted

3. chamar BeginReceive() em vez de Receive()

Tecnologias de messaging (MSMQ)

private static void MyReceive(Object source,

ReceiveCompletedEventArgs asyncResult) {

MessageQueue mq = (MessageQueue) source;

Message msg = mq.EndReceive(asyncResult.AsyncResult);

// display message on the screen

Console.WriteLine("Message: " + (string)msg.Body);

// start another asynchronous receive

mq.BeginReceive(); }

(21)

// add an event handler for the ReceiveCompleted event

mq.ReceiveCompleted += new

ReceiveCompletedEventHandler(MyReceive);

// Begin the asynchronous receive

mq.BeginReceive();

Tecnologias de messaging (MSMQ)

• Transacções

// create a transaction and start it

MessageQueueTransaction trans = new MessageQueueTransaction(); trans.Begin();

// open a message queue

MessageQueue mq = new MessageQueue(queueName);

// create the message

Message msg = new Message(…);

// send the message as part of the transaction

mq.Send(msg, trans);

// commit the transaction

(22)

• Acknowledgments

// open a message queue

MessageQueue mq = new MessageQueue(queueName);

// create the message

Message msg = new Message(…);

// we want a acknowledgement if received or not

Msg.AcknowledgeType = AcknowledgeTypes.FullReceive;

Msg.AdministrationQueue = new MessageQueue(adminQueue);

// send the message

mq.Send(Msg);

Tecnologias de messaging (MSMQ)

• Acknowledgments

– tipos de ack que podem ser usados em

Message.AcknowledgeType

• PositiveArrival • PositiveReceive

• NegativeReceive (se a mensagem ficar na fila)

• NotAcknowledgeReachQueue (se não chegar à fila)

• NotAcknowledgeReceive (quando o tempo expira)

• FullReachQueue (se chegou à fila, sim ou não)

(23)

– o body da mensagem é formatado em XML

(default) ou binário

– a propriedade Formatter da mensagem é

XmlMessageFormatter

ou

BinaryMessageFormatter

– mas… o

XmlMessageFormatter

não adivinha o tipo de

dados que foi serializado

– é necessário definir o

TargetType

do

XmlMessageFormatter

• isto é feito antes de receber a mensagem

Tecnologias de messaging (MSMQ)

• Um pormenor que não foi mencionado antes

// open a message queue

MessageQueue mq = new MessageQueue(queueName);

// the target type we have stored in the message body

System.Type[] types = new Type[] { typeof(Order) }; mq.Formatter = new XmlMessageFormatter(types);

// receive and convert message

Message msg = mq.Receive(); Order ord = (Order) msg.Body;

(24)

• Exemplo

– pretende-se transmitir uma ordem de compra (PurchaseOrder) para um certo produto, quantidade, e com a data actual – há 2 aplicações: uma que envia, outra que

recebe

– há 1 fila privada para ordens de compra chamada purchaseorders PurchaseOrder Product : string Quantity : int Date: DateTime SendPO purchaseorders PO ReceivePO

Tecnologias de messaging (MSMQ)

1. Instalar os componentes MSMQ

(25)

– verificar que os serviços MSMQ estão a correr

Tecnologias de messaging (MSMQ)

2. Criar a fila para as ordens de compra

(26)

2. Criar a fila para as ordens de compra

– criar uma nova fila privada

Tecnologias de messaging (MSMQ)

2. Criar a fila para as ordens de compra

(27)

– criar projecto C# (class library) no Visual Studio – definir uma nova classe

public class PurchaseOrder {

public string Product { get; set; } public int Quantity { get; set; } public DateTime Date { get; set; } // construtor

public PurchaseOrder() { Date = DateTime.Now; } }

Tecnologias de messaging (MSMQ)

4. Criar a aplicação SendPO

– criar projecto C# (console application) no Visual Studio – adicionar referência ao projecto da PurchaseOrder – adicionar referência para a assembly System.Messaging

(28)

4.

Criar a aplicação SendPO

– escrever o código da aplicação using System.Messaging;

PurchaseOrder PO = new PurchaseOrder(); PO.Product = ...

PO.Quantity = ...

MessageQueue mq = new MessageQueue(@".\private$\purchaseorders"); Message msg = new Message(PO);

mq.Send(msg, "PurchaseOrder");

body da mensagem

label da mensagem

fila

Tecnologias de messaging (MSMQ)

5. Criar a aplicação ReceivePO

– criar projecto C# (console application) no Visual Studio – adicionar referência ao projecto da PurchaseOrder – adicionar referência para a assembly System.Messaging

(29)

– escrever o código da aplicação using System.Messaging;

MessageQueue mq = new MessageQueue(@".\private$\purchaseorders"); System.Type[] types = new Type[] { typeof(PurchaseOrder) };

mq.Formatter = new XmlMessageFormatter(types); Message msg = mq.Receive();

PurchaseOrder PO = (PurchaseOrder)msg.Body;

Tecnologias de messaging (MSMQ)

6. Correr a aplicação SendPO

(30)

7. Correr a aplicação ReceivePO

Tecnologias de messaging (MSMQ)

8. Verificar as mensagens na fila

Referências

Documentos relacionados

A pesquisa foi desenvolvida nos municípios de Peixoto de Azevedo, Matupá, Novo Mundo e no rio Peixoto de Azevedo do estado de Mato Grosso, Brasil, os quais encontram-se na

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

Rivista in modo breve l'evoluzione della chiesa di Porto nell'ambito dei suoi rapporti con l'estero, cerchiamo adesso di ricordare che l'obiettivo di questo lavoro

34 É importante desenvolver ações de prevenção e promoção da saúde, bem como identificar e lidar com casos de insatisfação corporal, de modo a destacar o interesse por programas

Conclui-se que as informações ambientais evidenciadas sobre efluentes líquidos das empresas brasileiras deveriam ser mais divulgadas nos Relatórios Anuais e

É 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

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