Lançamento do programa de desenho MyPaint 2.0.0

Bom dia, Habr! Quero compartilhar um guia de estudo e referência dos conhecimentos que consegui reunir sobre RabbitMQ e condensar em recomendações e conclusões resumidas.

Índice

  • RabbitMQ. Parte 1. Introdução. Erlang, AMQP e RPC
  • RabbitMQ. Parte 2. Entendendo os Exchanges
  • RabbitMQ. Parte 3. Entendendo as Queues e Bindings
  • RabbitMQ. Parte 4. Entendendo o que são mensagens e quadros
  • RabbitMQ. Parte 5. Desempenho da publicação e consumo de mensagens
  • RabbitMQ. Parte 6. Visão geral dos módulos Federation e Shovel
  • RabbitMQ. Parte 7. Detalhes sobre Connection e Channel
  • RabbitMQ. Parte 8. RabbitMQ no .NET
  • RabbitMQ. Parte 9. Monitoramento

Um breve resumo sobre AMQP

AMQP (Advanced Message Queuing Protocol) é um protocolo aberto para a transmissão de mensagens entre componentes do sistema. A ideia principal é que subsistemas separados (ou aplicativos independentes) possam trocar mensagens de forma arbitrária através de um broker AMQP, que realiza o roteamento, garante a entrega, distribui fluxos de dados e permite a assinatura em tipos específicos de mensagens.

Protocolo AMQP introduz três conceitos:

Lançamento do programa de desenho MyPaint 2.0.0

  • exchange (ponto de troca ou exchange) — é onde as mensagens são enviadas. O ponto de troca distribui a mensagem roteia essas mensagens para uma ou mais filas. Ele roteia mensagens para a fila com base nas relações criadas (binding) entre ele e a fila
  • fila (fila) — é uma estrutura de dados em disco ou na memória, que armazenam referências às mensagens e fornece cópias das mensagens consumidores (para os consumidores)
  • binding (vinculação) — é uma regra que informa ao ponto de troca para qual fila essas mensagens devem ser enviadas.

O protocolo opera sobre TCP/IP.

Um resumo breve sobre Erlang

O código-fonte do projeto está no repositório em GitHub. A arquitetura RabbitMQ-server baseada em Erlang e BEAM.

Erlang foi desenvolvido pela Ericsson no meio da década de 1980 como um sistema de tempo real distribuído e tolerante a falhas para aplicações que requerem operação ininterrupta de 99,999%. Erlang é utilizado em diversas indústrias e aplicações modernas, como em WhatsApp. Mais detalhes podem ser encontrados no artigo arquitetura do WhatsApp, que o Facebook adquiriu por 19 bilhões de dólares.

Um resumo breve sobre RabbitMQ

RabbitMQ é um broker de mensagens de código aberto. Ele roteia mensagens com base em todos os princípios fundamentais do protocolo AMQP descritos em especificações. RabbitMQ implementa e complementa o protocolo. AMQP.

A ideia principal do modelo de troca de mensagens em RabbitMQ é que o producer (publicador) não envia mensagens diretamente para a fila. Na verdade, muitas vezes o publicador nem sabe se a mensagem será entregue a alguma fila.

Em vez disso, o editor pode enviar mensagens apenas para a troca. De um lado, a troca recebe mensagens dos editores, e do outro, as envia para filas. A troca deve saber exatamente o que fazer com a mensagem recebida. Deve ela ser adicionada a uma fila específica? Deve ela ser adicionada a várias filas? Ou a mensagem deve ser ignorada?

Lançamento do programa de desenho MyPaint 2.0.0

A operação pode ser resumida da seguinte forma: RabbitMQ pode ser descrito da seguinte maneira:

  1. O editor envia uma mensagem para uma troca específica.
  2. A troca, ao receber a mensagem, a roteia para uma ou mais filas de acordo com as regras de vinculação entre ela e a fila.
  3. A fila mantém uma referência a esta mensagem. A própria mensagem é armazenada na memória ou no disco.
  4. Assim que o consumidor está pronto para receber a mensagem da fila, o servidor cria uma cópia da mensagem por meio da referência e a envia.
  5. O consumidor recebe a mensagem e envia uma confirmação ao broker.
  6. O broker, ao receber a confirmação, remove a cópia da mensagem da fila. Em seguida, elimina da memória e do disco.

RPC

Processo RPC (chamada de procedimento remoto) é a base da maioria das interações com o núcleo. RabbitMQPor exemplo, as discussões iniciais das condições do cliente com RabbitMQ, demonstra um certo processo. RPCAssim que esta sequência é concluída, RabbitMQ estará pronto para receber solicitações do cliente:

Lançamento do programa de desenho MyPaint 2.0.0

Além disso, na especificação AMQP tanto o cliente quanto o servidor podem chamar comandos. Isso significa que o cliente aguarda interação com o servidor. Os comandos são classes e métodos. Por exemplo, Connection.Start – chamada do método. Iniciar classe Conexão.

Conexões e canais

Para essa troca de informações entre cliente e servidor, são utilizados canais.Os canais são criados dentro de uma conexão específica.Cada canal é isolado de outros canais. No caso de uma operação síncrona, não é possível executar o próximo comando até que a resposta seja recebida.

Para permitir o envio de comandos em paralelo, é necessário abrir vários canais. Cada canal cria um Erlang processo separado. Uma única conexão pode ter múltiplos canais (multiplexação.). Para cada canal, existem certas estruturas e objetos na memória. Portanto, quanto mais canais houver dentro da conexão, mais memória RabbitMQ usa para gerenciar tal conexão.

Lançamento do programa de desenho MyPaint 2.0.0

Um exemplo simples de criação de uma conexão e canal usando RabbitMQ.Client:

// ...
private void TryConnect()
{
    var factory = new ConnectionFactory() 
    {
        HostName = "host_name",
        UserName = "user_name",
        Password = "p@ssword",
        // Включение автоматичекого восстановления
        // соединения после сбоев сети 
        AutomaticRecoveryEnabled = true
    };
    _connection = factory.CreateConnection();
}
// ...
public void CreateChanel()
{
    _channel = _connection.CreateModel();
    // other options 
}

Abrir uma nova conexão para cada operação é fortemente desencorajado, pois isso resultará em altos custos. Os canais também precisam ser constantes, mas muitos erros de protocolo resultam no fechamento do canal, portanto, a vida útil do canal pode ser mais curta do que a da conexão.

Onde é utilizado RabbitMQ?

No contexto de microsserviços, o protocolo AMQP e sua implementação em RabbitMQ são frequentemente utilizados para interação assíncrona entre serviços.

No contexto de IIOT protocolo AMQP e sua implementação em RabbitMQ é usado para troca de dados entre servidores (servidor-servidor). Também é utilizado o plugin MQTT Plugin RabbitMQ que é uma implementação do protocolo MQTT para transmissão de dados entre sensores e servidores em ambientes de baixa largura de banda e alta latência (lista completa de protocolos suportados está disponível em site do projeto).

No próximo artigo, começaremos a explorar mais detalhadamente sobre Exchanges.

Links

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster