Por que eu devo ler este artigo:A Mensageria é um padrão arquitetural de integração, sendo ainda utilizado, mas pouco explorado em maiores detalhes pelo desenvolvedor.

Sua principal função é integrar aplicações ou suas camadas, ou de outras aplicações, de forma assíncrona através de Filas, Mensagens, Regras e Disparadores (também conhecidos como Triggers).

Um servidor robusto, tradicional e bastante confiável é o MSMQ da Microsoft, um Servidor de Enfileiramento de Mensagens que está sempre disponível para a instalação dentro de seus Sistemas Operacionais.

Neste artigo vamos focar mais na programação com o MSMQ e demonstrar ao leitor como criar Filas, Mensagens e interagir com elas enviando objetos e tratando-os.

Também mostraremos ao leitor como que o uso de Regras e Disparadores podem ser úteis nos processos de desenvolvimento e Regras de Negócio. Vamos criar um componente COM+, registrá-lo e mostrar como o MSMQ pode ativá-lo e como tiraremos proveito disto.

As aplicações empresariais atuais são desenvolvidas e modeladas em camadas e se comunicam com muitos outros sistemas dentro de uma mesma organização ou fora dela, como os Sistemas B2B (Business-to-Business) e B2C (Business-to-Customer).

Os usuários solicitam cada vez mais facilidades no uso, resposta rápida e aplicações cada vez mais sofisticadas que facilitem o seu trabalho, retornando mais tempo livre.

Uma integração confiável para processamento de informações gera um grande consumo de tempo, de design e desenvolvimento devido a sua complexidade.

O Servidor de Enfileiramento de Mensagens da Microsoft, ou MSMQ, facilita todo esse trabalho e garante a confiabilidade na entrega e no processamento das mensagens.

Muito do processamento interno em um sistema pode ser demorado e precisamos tornar o processo transparente para o usuário. Precisamos ter facilidade para armazenar mensagens e processos enquanto o usuário executa outras tarefas dentro do próprio sistema, sem interrupções.

Quando a mensagem é recebida e então processada, precisamos criar mecanismos de notificação para que o Sistema alerte o usuário sobre a ação ou grave em um Log.

Vamos exemplificar: um usuário compra algo no nosso site e usa seu cartão de crédito como forma de pagamento. Na vida real, verificamos se o cartão de crédito é válido (se não foi clonado, se o mesmo tem limite e etc.).

Outro passo do fluxo é o da operadora que aprova a compra ou não, e daí enviamos o produto ao cliente, atualizamos o nosso estoque e geramos pedidos para o Centro de Distribuição repor o item.

Algumas destas ações solicitadas, algumas executadas em tempo real e outras de forma assíncrona, precisam acontecer em um prazo extremamente confiável, não podendo onerar o cliente em nenhuma etapa desta cadeia, seja ele um problema técnico ou humano. A entrega e o processamento das mensagens evitam esta confusão caso sejam feitos de forma confiável.

O MSMQ não funciona como um Banco de Dados, mas sim como uma forma mais moderna de transporte de informações. Dizemos moderna por ter sido este sistema de mensageria o pioneiro e através dele surgiram novas tecnologias arquiteturais para a integração da informação assíncrona, como o SOA.

Mesmo com o advento de novos nomes para a mesma tecnologia, ainda hoje o MSMQ pode ser utilizado para receber e enviar mensagens ou de forma mais pragmática, como o uso de um componente COM+ que é ativado através de Disparadores e Regras de acordo com algumas configurações que veremos neste artigo.

A grande vantagem de um Sistema Servidor de Enfileiramento de Mensagens é justamente a sua capacidade de ser assíncrono, ou seja, funcionar independente de uma sequência de ações. Podemos enviar informações de locais diferentes sem que os sistemas estejam online.

Atualmente, a Google utiliza um sistema parecido que conhecemos como “Off Line”. Aplicativos como o Gmail, por exemplo, utilizam tal tecnologia para que o cliente possa continuar utilizando a aplicação caso haja algum problema de conexão e assim que os servidores ficam online novamente, o mesmo inicia a operação de sincronização.

No domínio do MSMQ, esta tecnologia de sincronização só funciona quando estamos interconectados entre vários servidores de mensageria que funcionam em forma de “Relay”, pois caso estejamos trabalhando com apenas um servidor e este ficar off line por algum motivo, ficaremos mesmo sem trabalhar com o servidor. Para a configuração de redundâncias e caches, existe muita informação disponível.

Como funciona o MSMQ

O MSMQ vem como parte de qualquer Windows, mas o foco deste artigo é no MSMQ distribuído com o Windows 7, mas se aplica às versões mais antigas e versões para Windows Server System.

As Filas, ou Queues, são utilizadas para armazenar ou rotear mensagens. Aplicações enviam mensagens para a filas e também as recebem e tratam à sua maneira, como mostra o esquema resumido apresentado na Figura 1.

Figura 1 - Esquema básico de um Sistema de Enfileiramento de Mensagens

Existem dois tipos diferentes de filas: as privadas e as públicas.

As filas privadas não permitem qualquer operação de roteamento porque podem ser acessadas remotamente. Sistemas podem enviar mensagens para filas privadas, outras aplicações ou camadas da mesma aplicação podem ler estas mensagens da fila na mesma instância do MSMQ.

Filas privadas são acessadas através da seguinte nomenclatura: "NomeMaquina\Private$\NomeDaFila", por exemplo, "maquina01\Private$\Pedidos". Se o MSMQ está instalado na mesma máquina que roda a sua aplicação, então podemos substituir o nome da máquina por um ponto (.), por exemplo: ".\Private$\Pedidos". Podemos utilizar as filas privadas como um grupo - no jargão MSMQ é workgroup - onde uma máquina que tem o MSMQ instalado e é acessada por todas as outras máquinas do grupo.

Filas privadas são uma boa prática caso todos os clientes/máquinas que acessem a fila estiverem na mesma rede e conectados a uma conexão rápida e confiável. Um bom exemplo seria uma aplicação que separasse os pedidos por localização e efetuasse o processamento dos pedidos.

O pedido é processado em três camadas distribuídas entre servidores. Estas três camadas podem utilizar a mesma instância do MSMQ com uma ou várias filas privadas para trocar mensagens de forma segura e fácil e para facilitar o roteamento é recomendado o uso de Regras e Disparadores.

Filas públicas são as mais recomendadas se sua aplicação está distribuída ou faz integração com meios de comunicação inseguros. Um bom exemplo seria ter a criação e o atendimento do pedido em locais geograficamente diferentes.

Podemos pensar neste termo "geograficamente diferente" como um assembly publicado e rodando em servidores ou instâncias diferentes, ou efetuados por sistemas de vendors/players diferentes como um portal de E-Commerce que revende produtos de outros fornecedores e o portal atende aos pedidos integrado ao sistema desses fornecedores; o portal faz o roteamento destes pedidos para cada fornecedor para que, processando a mensagem, façam o atendimento necessário.

Este tipo de abordagem nos diz que precisamos enviar estes pedidos pela internet aos fornecedores em e para qualquer parte do planeta.

Para isso, precisamos ter um servidor MSMQ e uma fila pública para cada fornecedor. Diante disso, a aplicação de E-Commerce colocará os pedidos nas filas públicas e então o MSMQ se encarregará de gerenciar a confiabilidade e segurança dos dados processados, e os fornecedores também serão alertados de que existem pedidos a serem atendidos. Filas públicas são acessadas através da convenção "NomeMaquina\NomeFila", por exemplo, "ServidorThor\Pedidos". Podemos também substituir o nome da máquina pelo ponto (.) se sua aplicação estiver no mesmo servidor que o MSMQ.

MSMQ pode ser implantado de duas formas: em grupo (workgroup) ou em um domínio (domain mode). O modo grupo permite apenas o acesso às filas privadas. Diante disso, podemos afirmar que não há roteamento de mensagens no modo grupo.

O modo domínio permite os dois tipos de filas. Mas, o modo domínio precisa que o servidor onde o MSMQ esteja ou será instalado faça parte de um domínio e que este domínio utilize o Microsoft Active Directory.

Filas privadas são mais rápidas que filas públicas. A escolha da natureza da fila é que irá determinar como será efetuada a implementação do MSMQ que seu projeto irá precisar. Se temos um ambiente distribuído e confiável ou um link de comunicação veloz, então utilize filas privadas e instale o MSMQ em modo de grupo. Informamos que o Modo de Grupos será o escopo deste artigo.

Mas, se tivermos um ambiente distribuído ou um link de comunicação instável então vamos precisar de roteamento de mensagens, que por sua vez, requer filas públicas e a instalação do MSMQ em modo domínio. O MSMQ instala os Serviços do Windows, desde o enfileiramento de mensagens a Triggers para enfileiramento das mesmas. Além do mais, podemos administrar e consultar nossas filas através de um Console de Gerenciamento que veremos mais adiante neste artigo.

O Roteamento nada mais é do que uma forma de proteger e controlar as mensagens mais sensíveis ao negócio, isto significa que quando uma fila que é instável recebe uma mensagem, ela é “automaticamente” enviada a uma outra fila mais segura.

E mesmo que haja a pergunta: “mas, se é um link instável ou não confiável por que a empresa decidiu passar dados por ela?”, a resposta para esta pergunta é sempre a mesma: Custo.

É mais fácil se proteger um link enviando para outra fila mais segura do que desperdiçar um link sem utilizá-lo. Existem formas em que podemos utilizar este link de forma mais sus ...

Quer ler esse conteúdo completo? Tenha acesso completo