Concrete Logo
Hamburger button

Apoio à Introdução à mensageria

  • Blog
  • 23 de Janeiro de 2012
Share

[fblike]

Este post é um texto de apoio ao artigo Introdução à mensageria publicado hoje mais cedo.

É mais ou menos um resumo traduzido do artigo do Gregor Hohpe em https://www.eaipatterns.com/Introduction.html que servia de base ao artigo Introdução à mensageria.

A razão de ser de existir é devido ao fato do site original ter saído do ar e sem ele, faltaria na Introdução alguns importantes conceitos de mensageria incluindo sua definição.

 

Introdução

Raramente aplicações existem isoladas. Para integrar duas ou mais aplicações, temos que lidar com os seguintes desafios:

    * Redes não são 100% confiáveis.

    * Redes são lentas

    * Aplicações podem usar diferentes linguagens, operar em plataformas diferentes e tratar os dados de acordo com suas próprias necessidades

    * Mudanças são inevitáveis. Uma solução de integração deve minimizar dependências entre aplicações. O acoplamento entre elas deve ser tão baixo que mudanças em uma aplicação não implique em mudanças nas outras.

Ao longo do tempo os desenvolvedores venceram os desafios acima tentando as seguintes abordagens:

    1. Transferência de arquivo – uma aplicação grava um arquivo em um lugar acordado e a outra lê e apaga após ler. O formato dos dados geralmente era um outro acordo.

    2. Compartilhamento de uma base de dados

    3. RPC, Remote Procedure Call – uma aplicação expunha suas funcionalidades de modo que pudesse ser acessado remotamente por outras. A comunicação ocorria em tempo real e de forma síncrona, quem solicita o serviço espera a resposta.

    4. Mensageria – Uma aplicação publica a mensagem em um determinado canal de acesso comum. Outras aplicações podem ler quando quiserem. As duas aplicações precisam combinar sobre o canal e sobre o formato das mensagens mas a comunicação é assíncrona.

Neste artigo só interessa a troca usando mensageria.

 

O que é mensageria?

Uma chamada telefônica é uma forma de comunicação síncrona porque os dois lados precisam estar disponíveis ao mesmo tempo. Já se um dos lados deixa um recado de voz que pode ser ouvido e respondido mais tarde, a comunicação é assíncrona.

 
Mensageria é uma tecnologia que permite comunicação de alta velocidade e de forma assíncrona entre sistemas diferentes  com mensagens entregues de forma garantida.

 
Os canais, também conhecidos como filas de mensagens (MQ = message queuing), são caminhos lógicos que conectam os sistemas. Eles se comportam como se fossem uma coleção de mensagens compartilhadas entre múltiplos computadores que podem ser acessados concorrentemente por múltiplas aplicações.

O sistema que envia a mensagem escrevendo no canal é o sender ou o producer e que recebe lendo o canal é o sistema receiver ou consumer.

A mensagem em si é simplesmente algum tipo de dado tal como Strings, arrays de bytes, objetos, etc..

Normalmente a mensagem contém um cabeçalho (header) e o corpo propriamente dito (body). O header contém os metadados sobre a mensagem. O corpo contém os dados trocados e é ignorado pelo sistema de mensageria. No linguajar dos devs, mensagem é o corpo.

 

O que é um sistema de mensageria?

É o tal canal. Normalmente é um software que gerencia e coordena as mensagens enviadas e recebidas com a responsabilidade de não perder nenhuma. Em caso de falha, deve ser capaz de tentar novamente até conseguir (ou ocorrer uma intervenção externa). Conhecido em inglês por messaging system ou message-oriented middleware (MOM).

 

Uma mensagem é transmitida em 5 passos:

    1. Criação – o sender cria a mensagem e a preenche com dados

    2. Envio – o sender adiciona a mensagem ao canal

    3. Entrega – o sistema de mensageria move a mensagem do computador do sender deixando disponível ao computador do receiver

    4. Recebe – o receiver lê a mensagem no canal

    5. Processamento – o receiver extrai os dados da mensagem

Tudo de acordo com a figura abaixo:

 

Dois tipos importantes de envio de mensagens:

    1. Send and forget (ou fire and forget) – o sender cria e envia a mensagem. Completado o envio, o sender assume outras tarefas confiando que o sistema de mensageria  em algum momento entregará a mensagem ao receiver.

    2. Store and forward – ao enviar, o sender armazena em seu computador a mensagem  (na memória ou no disco). O sistema de mensageria igualmente grava a mensagem no computador do receiver. Trocas de mensagens usando o processo Store-and-forward podem ser repetidas quantas vezes forem necessárias sem risco de existir em duplicata no receiver.