Mensageria

Message-oriented middleware

Definição

É uma infraestrutura de software ou hardware que suporta o envio e o recebimento de mensagens entre sistemas distribuídos. Ele permite que os módulos de aplicativos sejam distribuídos em plataformas heterogêneas e reduz a complexidade do desenvolvimento de aplicativos que abrangem vários sistemas operacionais e protocolos de rede. O middleware cria uma camada de comunicação distribuída que isola o desenvolvedor do aplicativo dos detalhes dos vários sistemas operacionais e interfaces de rede.

Producer e Consumer

  • producer: é um aplicativo que envia mensagens.

  • consumer: é um aplicativo que recebe mensagens.

Vantagens

  • Baixo Acoplamento: os producer são fracamente acoplados aos consumer e nem precisam saber de sua existência. Dessa forma permanecendo ignorantes quanto à topologia do sistema. Cada um pode continuar a operar de acordo com o normal, independentemente do outro.

Vantagens

  • Escalabilidade: oferece a oportunidade de melhor escalabilidade do que o cliente-servidor tradicional, por meio de operação paralela, armazenamento em cache de mensagens, roteamento baseado em árvore ou baseado em rede, etc.

  • Performance: A operação assíncrona permite que o produtor continue seu processamento de forma independente do processamento da mensagem.

Desvantagens

A principal desvantagem de muitos sistemas de message-oriented middleware é que eles requerem um componente extra na arquitetura, o agente de transferência de mensagens (message broker). Como em qualquer sistema, a adição de outro componente pode levar a reduções no desempenho e confiabilidade, além de tornar o sistema como um todo mais difícil e caro de se manter.

Desvantagens

Além disso, muitas comunicações entre aplicativos têm um aspecto intrinsecamente síncrono, com o remetente querendo especificamente esperar por uma resposta a uma mensagem antes de continuar. Como a comunicação baseada em mensagens funciona inerentemente de maneira assíncrona, ela pode não se encaixar bem nessas situações. Dito isso, a maioria desses sistemas tem recursos para agrupar uma solicitação e uma resposta como uma única transação pseudo-síncrona.

Message queues

Definição

Elas fornecem um protocolo de comunicação assíncrono, o que significa que o remetente e o destinatário da mensagem não precisam interagir com a fila de mensagens ao mesmo tempo. As mensagens colocadas na fila são armazenadas até que o destinatário as recupere. As filas de mensagens têm limites implícitos ou explícitos no tamanho dos dados que podem ser transmitidos em uma única mensagem e no número de mensagens que podem permanecer pendentes na fila.

Message Worker

Message Worker é um tipo de Message queues onde a suposição é que cada tarefa é entregue a exatamente um trabalhador.

workqueue

Publish–subscribe

Definição

É um padrão de mensagens em que os remetentes de mensagens, chamados publishers, não programam as mensagens para serem enviadas diretamente para destinatários específicos, chamados subscribers, mas categorizam as mensagens publicadas em classes sem conhecimento de quais subscribers. Da mesma forma, os subscribers manifestam interesse em uma ou mais classes e recebem apenas mensagens que são de interesse, sem o conhecimento de quais publishers.

Definição

publishsubscribe

Message filtering

No modelo publish–subscribe, os subscribers geralmente recebem apenas um subconjunto do total de mensagens publicadas. O processo de seleção de mensagens para recepção e processamento é chamado de message filtering. Existem duas formas comuns de filtragem: baseada em tópicos (Topics) e baseada em conteúdo.

Message broker

Definição

É um módulo de programa de computador intermediário que traduz uma mensagem do protocolo de mensagem formal do remetente para o protocolo de mensagem formal do destinatário. Os Message broker são elementos em redes de telecomunicações ou computadores onde os aplicativos de software se comunicam trocando mensagens formalmente definidas.

RabbitMQ

O RabbitMQ é o message broker de software livre mais amplamente implantado:

  • Possue mais de 35.000 instancias de produção do RabbitMQ em todo o mundo em pequenas startups e grandes empresas, o RabbitMQ é o mais popular message broker de código aberto.

RabbitMQ

  • Leve e fácil de implementar no local e na nuvem. Suporta vários protocolos de mensagens. O RabbitMQ pode ser implementado em configurações distribuídas e federadas para atender a requisitos de alta disponibilidade e alta escala.

  • Pode ser executado em muitos sistemas operacionais e ambientes de nuvem e fornece uma ampla gama de ferramentas de desenvolvedor para os idiomas mais populares.

Conceitos

  • Queue: Local onde as mensagens são armazenadas para serem consumidas.

  • Exchange: é responsável pelo roteamento das mensagens para as diferentes queues. Uma troca aceita mensagens do aplicativo do producer e as roteia para filas de mensagens com a ajuda de header attributes, bindings, and routing keys.

Conceitos

  • Binding: é um link que você configura para vincular uma queue a uma exchange.

  • Routing keys: a chave de roteamento é um atributo de mensagem. A exchange pode olhar para essa chave ao decidir como rotear a mensagem para as queues (dependendo do tipo de exchange).

Conceitos

producerconsume

Direct Exchange

direct exchange

Direct Exchange

Entrega a mensagem para as queues de acordo com a routing key definida na mensagem. A routing key é uma atributo da mensagem que é enviado no header para o producer.

Topic Exchange

topic exchange

Topic Exchange

Entrega mensagem para queues de acordo com comparação de wildcards entre a routing key e o padrão de rota definido no queue binding. As mensagens assim são roteadas para uma ou várias queues de acordo com a comparação entre a routing key e o padrão.

Fanout Exchange

fanout exchange

Fanout Exchange

Essa exchange copia e encaminha as mensagens recebidas para todas as queues que estão associadas a elas.

Headers Exchange

headers exchange

Headers Exchange

Roteiam mensagem com base em argumentos contidos nos headers e valores. Elas roteia por valores dos headers. A mensagem é considerada que será roteada se o valor do header é igual ao valor do binding.

Dead Letter Exchange

Se nenhuma queue foi selecionada para ser roteada em uma exchange a mensagem é removida. Nesse casos essa extensão pode ser utilizada para capturar essas mensagem.

Plugins

  • Federation Plugin: Permitem que exchanges e queues possam receber mensagem de um ou mais upstreams (exchanges e queues remotas). Uma federated exchange pode rotear mensagens publicadas remotamente em uma queue local. Uma federated queue possibilita que um consumidor local receba mensagens de uma queue remota.

Plugins

  • Shovel Plugin: Utilizado para mover mensagens de um fonte (queue, exchange) em um broker para uma destinação em outro broker (queue, exchange). Ele permite a criação e a configuração de várias shovels que são inicializadas automaticamente quando o broker inicia.

Plugins

  • MQTT: MQTT é um protocolo para conexão de maquina para máquina. Foi desenvolvido para o transporte extremamente leve de mensagens.

  • STOMP: STOMP é um protocolo para streaming de mensagens orientado a textos.

  • WebSockets: STOMP ou MQTT podem ser utilizados com WebSockets.