Garantindo desacoplamento com Message Endpoints

Publicado em 28/01/2012

2


Olá pessoal. Tudo certo!?

Nesse post, concluo uma relação de “Enterprise Integration Patterns” fundamentais. Se você está chegando agora, deve considerar ver posts anteriores relacionados:

  1. Trocando mensagens (entre aplicações) usando MSMQ (com C#)
  2. Ganhando Flexibilidade e Escalabilidade com Mensageria e “Pipes and Filters” (usando C#)
  3. Encaminhamento condicional de mensagens com Message Router (usando C#)
  4. Promovendo compatibilidade com Message Translator (usando C#)

Como pode notar, até aqui, mesclei alguma prática com teoria. Para a parte prática, usei fundamentalmente MSMQ. Entretanto, o contexto teórico é aplicável a outros serviços de mensageria, bem como o próprio Windows Azure.

Agora, vou deixar o código um pouco de lado.

O que é um Message Endpoint?

Pattern que garante baixo acoplamento entre aplicações e serviços/infraestrutura de mensageria. Observe:

image

Nesse diagrama, podemos perceber algums elementos importantes:

  1. aplicações independentes enviando e recebendo mensagens;
  2. sistema especialista de mensageria (nos exemplos, estou usando MSMQ);
  3. Filtros executando algum tipo de processamento/direcionamento/conversão das mensagens.

Repare que esses elementos são “independentes” (não fazem parte do mesmo pacote).

Um Message Endpoint nada mais é que um componente interfaceando a aplicação e a infraestrutura de mensageria.

Entendendo melhor a relação infra de mensageria com nossos aplicativos

Um sistema de mensageria opera de forma semelhante a um servidor/serviço. Ele recebe e responde requisições.

Como “servidor”, sistemas de mensageria tem clientes. Nesse contexto, as aplicações que os utilizam.

image

Considere:

  • O server provê uma API para que seus clientes possam interagir com ele;
  • Essa API não é “application-specific”, e sim “domain-specific”;

Por que um Messaging Endpoint é importante?

O Messaging Endpoint é o “ponto-de-ligação” entre nossos aplicativos e a API do servidor de mensageria.

Adotando esse pattern, permitimos que o restante da aplicação saiba pouco sobre: formato de mensagens; canais; etc.

Message Endpoint encapsula o servidor de mensageria (e suas particularidades) do resto da aplicação. Assim se decidirmos  escolher outro mecanismo, bastará substituir esse componente preservando todo o resto.

Boas práticas na escrita de Message Endpoints

Message Endpoints devem:

  • enviar mensagens (para o “servidor” de mesageria) ou receber. Nunca fazer as duas coisas;
  • publicar mensagens em apenas uma Queue;

Logo, devem existir tantos endpoints quanto canais de comunicação e/ou operações.

Era isso!

Publicado em: Post