terça-feira, 24 de abril de 2007

Aplicações corporativas nunca funcionam isoladas. Mensagens síncronas x mensagens assíncronas



Nas empresas há dezenas de sistemas que precisam trocar informações. Estes sistemas, algumas vezes, foram desenvolvidos de forma independente visando resolver algum problema isolado. Sendo assim ou não, quase todos precisam se integrar aos demais, trocando informações e serviços.

Muitos programadores desenvolvem as trocas de mensagens e as chamadas a comandos em outros sistemas usando mensagens síncronas. Isto geralmente exige algum esforço de programação para ter garantias de que as mensagens chegam ao destino. Talvez a maior parte das aplicações que usam web services para integrar aplicações o façam trocando mensagens síncronas.

Este post serve apenas para lembrar que há vantagens na integração de sistemas usando troca de mensagens assíncronas que usa a abordagem "envie e esqueça": Quem envia as mensagens ou pedidos de execução de comandos não precisa ficar parado esperando a resposta. Esta pode vir posteriormente e ser recebida via callback por alguma thread que a escute. As principais vantagens são:
  1. As mensagens ou chamadas a comando podem ser retransmitidas e assim a confiabilidade global do sistema aumenta muito.
  2. Por não precisar ficar bloqueado esperando resposta, melhora o uso dos recursos dos sistemas e assim também a escalabilidade.

Usar mensagens assíncronas não é mais difícil nem mais caro. Apenas exige que se inclua na arquitetura um provedor de serviços de mensageria. Para a nossa sorte há vários provedores gratuitos com bom desempenho com boas facilidades de gerenciamento.

Em termos de programação Java o esforço não aumenta muito por 2 motivos:
  1. A API JMS é boa, estável e fácil de programar mesmo sem auxílio de Message Driven Beans;
  2. A parte "suja" da programação para garantir o recebimento das mensagens fica por conta do provedor de mensageria.

Então o que você está esperando para mudar seus paradigmas e diminuir o acoplamento entre seus sistemas? Se é por falta de livros seus problemas acabaram pois aí vão 2 dicas boas:

  1. Java Messaging do Eric Bruno
  2. Enterprise Integration Patterns de Gregor Hohpe e Bobby Woolf com várias contribuições de outros.

Um comentário:

mojitos disse...

Olá Luca!

Nós usamos JMS aqui na empresa para centralizar informações provenientes de sistemas diversos que precisam se comunicar com um mainframe. Fizemos isso usando esse mecanismo de mensagens assincronas e ficou bem interessante. No entanto, a coisa funcionava bem com o nosso servidor de aplicações em ambiente de desenvolvimento (O JBoss 3.2.7), mas quando colocamos o sistema em produção o mecanismo de mensagens não funcionou e isso foi atribuído ao servidor de aplicações em produção (O IBM WebSphere).

Dado tua experiência com sistemas, Você tem alguma idéia porque aconteceria algo dessa natureza?

Parabens pelo blog, tava demorando pra virar blogueiro (hehehe!)

Abraços,

Proteu Alcebidiano.

Quem sou eu

São Paulo/Paraty, SP/RJ, Brazil
Engenheiro estrutural COPPE/UFRJ por formação, desenvolvedor Java por experiência e poeta se sobrasse tempo