Elemar DEV

Tecnologia e desenvolvimento .net

Sobre a integração de aplicações através de mensageria

Olá pessoal. Tudo certo?!

Continuo com meu “breve passeio” por estilos de integração entre aplicações. Já vimos que:

  • “Transferência de arquivos” e “Compartilhamento de banco de dados” facilitam o compartilhamento de dados, mas não de funcionalidades;
  • “Transferência de arquivos” pode se tornar uma solução difícil de manter e gerenciar na medida que a “demanda” aumenta;
  • “Compartilhamento de banco de dados” implica na definição de um esquema de banco de dados que seja comum a todos os aplicativos – na prática, pouco comum;
  • “Chamadas remotas”  facilitam o compartilhamento de funcionalidades, mas aumentam o acoplamento e a fragilidade potencial do sistema como um todo.

Nesse post, apresento a alternativa mais “poderosa” (IMHO) de integração: mensageria.

Implementação básica

A implementação desse modelo respeita a seguinte dinâmica:

  • Duas ou mais aplicações enviam “mensagens” comunicando a ocorrência de um evento que seja potencialmente interessante para as demais;
  • O conteúdo da mensagem inclui informações relacionadas ao evento (ex: alteração de um endereço);
  • O formato da mensagem pode ser o mais conveniente possível para quem está publicando. Mais tarde, na própria infraestrutura da Message Bus, poderá ocorrer uma tradução;
  • Há um “message bus” que funciona como um “canal inteligente”;
  • Aplicações “assinam” o canal para que sejam notificadas quando mensagens que atendam determinadas características forem “adicionadas”;
  • As mensagens são adicionadas conforme  os eventos forem ocorrendo e são “lidas” da Message Bus conforme a configuração das aplicações consumidoras;
  • A relação de “publicação” e “consumo” passa a ser naturalmente assíncrona e desacoplada;

Outra forma de descrever a implementação básica seria:

Onde reconhecemos:

  • Duas (ou mais) aplicações publicando e consumindo mensaagens através de pontos de extensão bem determinados (end-points);
  • Um servidor de mensageria (há diversas opções no mercado) que permite a configuração de uma estrutura de pipes & filters
  • Uma “configuração de pipes & filters” ajustada a atender as especificidades das demandas por integração.

Um canal inteligente

Para mim, o aspecto mais interessante desse estilo de integração está no estabelecimento de um “canal inteligente”. Aplicações produzem e consomem mensagens, mas há um “universo de possibilidades” na gestão do canal. Abaixo relaciono apenas algumas possibilidades já discutidas em outros posts aqui do blog.

A mensagem, adicionada ao canal, pode ser filtrada ou transformada através do estabelecimento de “pipes e filtros“. Ou seja, podem ser definidos múltiplos canais que podem ser processados independentemente por filtros (map & filter). Cada canal, então, pode ser associado a uma aplicação consumidora.

Dessa forma, ganhamos, por exemplo, a possibilidade de escalar horizontalmente (conforme a demanda).

Além disso, o canal pode ajustar o processo de negócio direcionando que aplicativo deverá receber uma determinada mensagem (veja “Encaminhamento condicional“). Ou seja “a inteligência da integração” passa a estar no canal.

Caso uma aplicação precise de uma mensagem “traduzida” (diferente daquela que está sendo publicada pela aplicação de origem), será possível adicionar um filtro de tradução (ver Message Translator). Isso reforça ainda mais o desacoplamento.

Por fim, suporte natural a falhas de processamento através da própria infraestrutura de mensageria (ver tratando incoerências de integração)

E estas são apenas algumas possibilidades. No futuro devo discutir algumas outras possibilidades.

Combinando com outros estilos de integração

Outro aspecto muito interessante é que esse estilo pode ser facilmente ajustado para suportar aplicações sem suporte nativo.

Por exemplo, se uma determinada aplicação fornece uma API (para chamadas remotas), podemos escrever um endpoint (ver Entendendo Endpoints) externo que “consome mensagens” e aciona a API. A mesma relação pode ser estabelecida para sistemas com suporte a “transferência de arquivos”.

Por que, na prática, é tão difícil?

Integrações baseadas em mensageria são, ao meu ver, as mais inteligentes e expansíveis. Entretanto, alguns aspectos precisam ser considerados cuidadosamente:

  • A configuração do canal pode se tornar tão complexa quanto o desenvolvimento de um dos aplicativos;
  • A integração baseada em mensageria deve ser assíncrona – o que pode exigir um pouco mais de “fosfato” no desenho da solução;
  • O servidor de mensageria pode se tornar gargalo da integração.

Concluindo…

Integrações baseadas em mensageria são a solução ideal para ambientes que exigem grande flexibilidade E possuem infraestrutura de TI adequada.

Bem gerenciado e aplicado, esse estilo de integração “desacopla” os aplicativos e reforça a coesão de cada etapa do processo.

Era isso.

2 Comentários em “Sobre a integração de aplicações através de mensageria

  1. Luciano Azevedo
    18/10/2012

    Elemar, boa explanação. Aproveitando, qual sua escolha para servidor de mensageria?

  2. Vocês acham que esse novo produto pode útil para usar dessa maneira proposta pelo Elemar ?

    Service Bus for Windows Server (Service Bus 1.0)

    http://blogs.msdn.com/b/windowsazure/archive/2012/10/24/announcing-public-availability-of-service-bus-for-windows-server-service-bus-1-0.aspx

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

Você está comentando usando sua conta WordPress.com. Sair / Mudar )

Imagem do Twitter

Você está comentando usando sua conta Twitter. Sair / Mudar )

Foto do Facebook

Você está comentando usando sua conta Facebook. Sair / Mudar )

Conectando a %s

Informação

Publicado às 18/10/2012 por em Post e marcado , .

Estatísticas

  • 430,016 hits
%d bloggers like this: