RabbitMQ. Parte 1. Introduzione. Erlang, AMQP

Buongiorno, Habr! Voglio condividere un manuale di riferimento delle conoscenze che sono riuscito a raccogliere su RabbitMQ e condensare in brevi raccomandazioni e conclusioni.

Indice

  • RabbitMQ. Parte 1. Introduzione. Erlang, AMQP e RPC
  • RabbitMQ. Parte 2. Approfondiamo gli Exchanges
  • RabbitMQ. Parte 3. Approfondiamo le Code e i Binding
  • RabbitMQ. Parte 4. Comprendiamo cosa sono i messaggi e i frame
  • RabbitMQ. Parte 5. Performance di pubblicazione e consumo dei messaggi
  • RabbitMQ. Parte 6. Panoramica dei moduli Federation e Shovel
  • RabbitMQ. Parte 7. Dettagli su Connessione e Canale
  • RabbitMQ. Parte 8. RabbitMQ in .NET
  • RabbitMQ. Parte 9. Monitoraggio

Brevemente su AMQP

AMQP (Advanced Message Queuing Protocol) è un protocollo aperto per la trasmissione di messaggi tra i componenti di un sistema. L'idea principale è che singole sottosistemi (o applicazioni indipendenti) possano scambiarsi messaggi in modo arbitrario attraverso un broker AMQP, che gestisce il instradamento, garantendo eventualmente la consegna, la distribuzione dei flussi di dati e l'iscrizione ai tipi di messaggi desiderati.

Protocollo AMQP introduce tre concetti:

RabbitMQ. Parte 1. Introduzione. Erlang, AMQP

  • exchange (punto di scambio o exchange) — a questo vengono inviati i messaggi. Il punto di scambio distribuisce il messaggio è collegato a una o più code. Esso instrada i messaggi nella coda in base alle relazioni create (binding) tra esso e la coda
  • queue (coda) — una struttura dati su disco o in memoria, che memorizza i riferimenti ai messaggi e restituisce copie dei messaggi consumers (consumatori)
  • binding (binding) — una regola che comunica al punto di scambio in quale coda questi messaggi devono essere inviati

Il protocollo funziona sopra TCP/IP.

Brevemente su Erlang

Il codice sorgente del progetto si trova nel repository su GitHub. Architettura RabbitMQ-server si basa su Erlang e BEAM.

Erlang sviluppato dall'azienda Ericsson a metà degli anni '80 come un sistema distribuito, tollerante ai guasti, in tempo reale per applicazioni che richiedono un funzionamento affidabile del 99,999%. Erlang viene utilizzato in vari settori e applicazioni moderne, come ad esempio WhatsApp. Maggiori dettagli possono essere letti nell'articolo l'architettura di WhatsApp, che Facebook ha acquistato per 19 miliardi di dollari

Brevemente su RabbitMQ

RabbitMQ è un broker di messaggi open source. Instrada i messaggi secondo i principi fondamentali del protocollo AMQP descritti in specifica. RabbitMQ implementa e arricchisce il protocollo AMQP.

L'idea principale del modello di messaggistica in RabbitMQ è che producer (publisher) non invia messaggi direttamente nella coda. In realtà, molto spesso il publisher non sa nemmeno se il messaggio verrà realmente consegnato a una qualsiasi coda.

Invece, il publisher può inviare messaggi solo a un exchange. Da un lato, l'exchange riceve messaggi dai publisher, dall'altro li invia in code. L'exchange deve sapere esattamente cosa fare con il messaggio ricevuto. Deve essere aggiunto a una coda specifica? Deve essere aggiunto a più code? O il messaggio deve essere ignorato.

RabbitMQ. Parte 1. Introduzione. Erlang, AMQP

Il lavoro può essere riassunto come segue: RabbitMQ Il publisher invia un messaggio a un exchange specifico

  1. L'exchange, ricevuto il messaggio, lo instrada in una o più code in base alle regole di binding tra esso e la coda
  2. La coda conserva un riferimento a questo messaggio. Il messaggio stesso è memorizzato in memoria o su disco
  3. Appena il consumatore è pronto a ricevere il messaggio dalla coda, il server crea una copia del messaggio tramite il riferimento e lo invia
  4. Il consumatore riceve il messaggio e invia una conferma al broker
  5. Il broker, ricevuta la conferma, rimuove la copia del messaggio dalla coda. Poi elimina dalla memoria e dal disco
  6. RPC (remote procedure call)

RPC

Processo è alla base della maggior parte delle interazioni con il nucleo . Ad esempio, le discussioni iniziali sui termini del cliente con RabbitMQ, dimostra un certo processo RabbitMQ. Non appena questa sequenza è completata, RPCsarà pronto a ricevere richieste dal cliente: RabbitMQ Inoltre, nella specifica

RabbitMQ. Parte 1. Introduzione. Erlang, AMQP

sia il cliente che il server possono invocare comandi. Ciò significa che il cliente attende di interagire con il server. I comandi sono classi e metodi. Ad esempio, AMQP Connection.Start – invocazione del metodo Connessioni e canali Avvia classe Connection.

Per tale scambio di informazioni tra cliente e server si utilizzano

canali . I canali vengono creati all'interno diuna connessione specifica . Ogni canale è isolato dagli altri canali. Nel caso sincrono non è possibile eseguire il comando successivo fino a quando non si riceve una risposta.Per poter inviare comandi in parallelo è necessario aprire più canali. Ogni canale crea un

processo separato. Una connessione può avere più canali ( Erlang multiplexing). Per ogni canale esistono alcune strutture e oggetti nella memoria. Pertanto, più canali ci sono all'interno di una connessione, maggiore saràla memoria utilizzata da RabbitMQ per gestire tale connessione. Un semplice esempio di creazione di una connessione e di un canale utilizzando

RabbitMQ. Parte 1. Introduzione. Erlang, AMQP

Esempio semplice di creazione di una connessione e di un canale utilizzando 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 
}

Non è consigliabile aprire una nuova connessione per ogni operazione, poiché questo porterà a costi elevati. Anche i canali devono essere costanti, ma molti errori di protocollo portano alla chiusura del canale, quindi la durata del canale può essere più breve rispetto a quella della connessione.

Dove viene utilizzato RabbitMQ?

Nel contesto dei microservizi, il protocollo AMQP e la sua implementazione in RabbitMQ viene spesso utilizzato per interazione asincrona tra i servizi.

Nel contesto di IIOT per l'invio di queste query e delle risposte ad esse. SPARQL è una raccomandazione AMQP e la sua implementazione in RabbitMQ viene utilizzato per lo scambio di dati tra server (server-server). Si utilizza anche il plugin MQTT Plugin RabbitMQ che è un'implementazione del protocollo MQTT per la trasmissione dei dati tra il sensore e il server in ambienti a bassa velocità e con alta latenza (l'elenco completo dei protocolli supportati è riportato su sito del progetto).

Nell'articolo seguente inizieremo a esplorare in dettaglio gli Exchanges.

Link

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster