Cenários de implementação de serviços com WCF - Parte 5 : Serviços com Filas de Mensagens (MSMQ)
Serviços com Filas de Mensagens (MSMQ)
Olá pessoal, tudo certo?
Um novo cenário para nosso estudo destaca os serviços com suporte a filas de mensagens. Comunicação assíncrona, que exige garantia de entrega de mensagens, recuperação ou simplesmente o tracking de mensagens são exemplos de recursos para esse tipo de serviço.
Os patterns de mensagens desconectadas garantem o baixo acoplamento para soluções orientadas a serviços. Como principal benefício, torna-se possível a construção de processos de longa duração, sem a necessidade de espera por respostas on-line, além da garantia de entrega de mensagens, para momentos onde serviços, equipamentos e redes estão off-line ou desconectados.
O Microsoft Message Queuing (MSMQ) é uma plataforma de mensageria que suporta este tipo de cenário, onde WCF amplia o conceito de componentes enfileirados (queued components) suportado pelo Enterprise Services do .NET 2.0. Desse modo, clientes WCF podem enviar mensagens para uma fila e serviços podem receber essas mensagens a partir da fila, usando um modelo de programação familiar aos outros recursos do WCF.
A principal característica desse cenário é que clientes e serviços não interagem diretamente, mas sim, através de uma fila de mensagens. Outros benefícios são:
- Garantia de entrega de mensagens de forma assíncrona;
- Mensageria desconectada;
- Cenários de publicação e subscrição;
A tabela a seguir apresenta as principais características para a configuração de serviços com suporte a mensageria:
Característica | Descrição |
Hosting |
Windows NT Services sobre Windows Server 2003 ou Windows Activation Service (WAS) sobre Windows Server 2008 |
Protocolo de Transporte |
MSMQ (nativo, SRMP ou SRMPS) |
Protocolo de Mensagens |
SOAP + Binário |
Autenticação |
Certificados X.509 usados para autenticar o originador da mensagem (sender). |
Autorização |
Certificados X.509 usados para autorizar o originador da mensagem (sender). |
Segurança |
Certificados X.509 usados para proteger as mensagens colocadas na fila. |
Autenticação para a fila |
Certificados X.509 usados para autenticar o chamador da fila. |
Autorização para a fila |
Certificados X.509 usados para autorizar o chamador da fila. |
Segurança na fila |
O certificado X.509 do chamador é usado para assinar a mensagem enviada para a fila. Criptografia é normalmente tratada no nível da mensagem. |
Para a configuração de serviços e filas, temos 2 plataformas possíveis com WCF:
- MSMQ 3.0 on Windows Server 2003;
- MSMQ 4.0 on Windows Server 2008;
Para essas plataformas, o WCF oferece o binding de transporte NetMsmqBinding, que garante os detalhes de configuração para o envio de mensagens de forma assíncrona no MSMQ.
O NetMSMQBinding oferece um transporte baseado em encoding binário, permitindo um bom desempenho para o tratamento de mensagens. Oferece também segurança no nível de transporte e de mensagens, além do suporte a transações. Esse binding torna-se uma primeira escolha para cenários assíncronos de alta vazão e que precisem ser confiáveis, duráveis e com suporte ao modelo de mensageria unidirecional (queued One-Way Messaging) .
Para cenários onde o serviço deve interagir com soluções MSMQ existentes, o binding indicado será o MsmqIntegrationBinding. O MSMQIntegrationBinding oferece um transporte para integração MSMQ com MSMQ encoding. Fornece a segurança do ambiente MSMQ, assim como o suporte a transação. É uma primeira escolha como binding para cenários de integração com aplicações MSMQ já existentes, além de ser de simples integração com o Host Integration Server e o Biztalk Server, quando existentes na solução.
A figura a seguir apresenta um exemplo de integração de mensagens com serviços WCF:
Um exemplo de aplicação de mensageria para o disparo de serviços é dado na demonstração Demux, disponível para download no link a seguir:
Custom Demux
Ref.: https://msdn.microsoft.com/en-us/library/ms752265.aspx
O exemplo acima apresenta como é possível disparar serviços através do endereçamento do header de mensagens enviadas para a fila MSMQ. Esse cenário é muito interessante para o tratamento de mensagens, criando um roteador de serviços muito comum em aplicações do mercado financeiro, por exemplo.
Outro artigo interessante para esse tipo de cenário é dado a seguir:
Queuing in WCF
Ref.: https://msdn.microsoft.com/en-us/library/ms789048.aspx
No próximo post, vamos falar de nosso último cenário, serviços de workflow... não percam!
Por enquanto é só! Até o próximo post :)
Waldemir.