RabbitMQ. Bagian 1. Bubuka. Erlang, AMQP

Wilujeng siang, Habr! Abdi hoyong bagikeun buku ajar-rujukan buku pangaweruh anu kuring junun ngumpulkeun RabbitMQ jeung nyindekkeun kana saran jeung kacindekan singget.

daptar eusi

  • RabbitMQ. Bagian 1. Bubuka. Erlang, AMQP sareng RPC
  • RabbitMQ. Bagian 2. Ngarti bursa
  • RabbitMQ. Bagian 3. Pamahaman antrian jeung Bindings
  • RabbitMQ. Bagian 4. Ngartos naon seratan sareng pigura
  • RabbitMQ. Bagian 5: Publishing na Consuming Performance Pesen
  • RabbitMQ. Bagian 6. Ihtisar Féderasi sarta modul sekop
  • RabbitMQ. Bagian 7. Rincian ngeunaan Connection na Chanel
  • RabbitMQ. Bagian 8. RabbitMQ di .NET
  • RabbitMQ. Bagian 9. Ngawaskeun

Sakeudeung ngeunaan AMQP

AMQP (Advanced Message Queuing Protocol) nyaéta protokol kabuka pikeun ngirimkeun pesen antara komponén sistem. Gagasan dasar nyaéta yén subsistem individu (atanapi aplikasi mandiri) tiasa tukeur pesen sacara wenang ngaliwatan calo AMQP, anu ngalaksanakeun routing, kamungkinan ngajamin pangiriman, nyebarkeun aliran data, sareng ngalanggan jinis pesen anu dipikahoyong.

Protokol AMQP ngawanohkeun tilu konsép:

RabbitMQ. Bagian 1. Bubuka. Erlang, AMQP

  • exchange (titik bursa atanapi bursa) - pesen dikirim ka dinya. Titik tukeur nyebarkeun pesen dina hiji atawa leuwih antrian. Manéhna rute pesen ka antrian dumasar kana tautan anu diciptakeun (binding) antara manéhna jeung antrian
  • queue (antrian) - struktur data dina disk atawa dina RAM éta nyimpen tumbu ka talatah jeung mere salinan talatah consumers (ka konsumén)
  • binding (ngariung) - aturan éta ngabejaan titik bursa nu antrian pesen ieu kudu balik kana

Protokol dijalankeun di luhur TCP / IP.

Sakeudeung ngeunaan Erlang

Kodeu sumber proyék aya dina gudang di GitHub. Arsitéktur RabbitMQ-server dumasarkeun kana erlang jeung BEAM.

Erlang dikembangkeun ku pausahaan Ericsson dina pertengahan 1980s salaku disebarkeun, kasalahan-toleran, sistem real-time pikeun aplikasi merlukeun 99,999% uptime. Erlang dipaké dina sagala rupa industri jeung aplikasi modern, f.eks. WhatsApp. Anjeun tiasa maca langkung seueur dina tulisan Arsitéktur WhatsApp, anu dibeli Facebook pikeun $ 19 milyar

Sakeudeung ngeunaan RabbitMQ

Kelenci MQ mangrupa calo pesen open source. Éta rute pesen sapanjang sadaya prinsip dasar protokol AMQP dijelaskeun dina spésifikasi. RabbitMQ implements sarta suplement protokol AMQP.

Gagasan utama modél olahtalatah di RabbitMQ hal éta producer (penerbit) teu ngirim pesen langsung ka antrian. Nyatana, sareng sering, penerbit henteu terang upami pesenna bakal dikirimkeun ka antrian naon waé.

Gantina, penerbit ngan bisa ngirim pesen ka bursa. Di hiji sisi, bursa narima pesen ti penerbit, sarta di sisi séjén, éta ngirimkeun aranjeunna ka antrian. Bursa kedah terang naon anu kudu dilakukeun sareng pesen anu ditampi. Kedah eta ditambahkeun kana antrian husus? Kedah eta ditambahkeun kana sababaraha antrian? Atawa pesen kudu dipaliré.

RabbitMQ. Bagian 1. Bubuka. Erlang, AMQP

Karya singket RabbitMQ bisa digambarkeun saperti kieu:

  1. Penerbit ngirim pesen ka bursa husus
  2. Bursa, saatos nampi pesen, rute ka hiji atanapi langkung antrian saluyu sareng aturan anu mengikat antara éta sareng antrian.
  3. Antrian nyimpen rujukan pikeun pesen ieu. Pesenna sorangan disimpen dina RAM atanapi dina disk
  4. Sakali konsumen parantos siap nampi pesen tina antrian, server nyiptakeun salinan pesen ngalangkungan tautan sareng ngirim.
  5. Konsumén nampi pesen sareng ngirim konfirmasi ka calo
  6. Calo, nalika nampi konfirmasi, ngaluarkeun salinan pesen tina antrian. Teras ngahapus tina RAM sareng disk

RPC

proses RPC (panggero prosedur jarak jauh) underlies ampir sakabéh interaksi jeung inti RabbitMQ. Contona, diskusi awal ngeunaan istilah klien kalawan RabbitMQ, nunjukkeun prosés anu tangtu RPC. Sakali runtuyan ieu réngsé, RabbitMQ bakal siap nampi pamundut ti klien:

RabbitMQ. Bagian 1. Bubuka. Erlang, AMQP

Ogé dina spésifikasi AMQP boh klien sareng server tiasa ngaluarkeun paréntah. Ieu ngandung harti yén klien nu ngantosan komunikasi sareng server. Paréntah nyaéta kelas sareng metode. Salaku conto, Connection.Start - métode panggero Start класса Connection.

Sambungan sareng saluran

Pikeun bursa inpormasi sapertos antara klien sareng server, saluran. Saluran dijieun dina sambungan husus. Unggal saluran diisolasi tina saluran anu sanés. Dina kasus sinkron, teu mungkin pikeun ngaéksekusi paréntah salajengna nepi ka respon narima.

Pikeun tiasa ngirim paréntah paralel, anjeun kedah muka sababaraha saluran. Unggal channel nyieun misah Erlang prosés. Hiji sambungan tiasa gaduh sababaraha saluran (multiplexing). Pikeun unggal saluran aya struktur jeung objék nu tangtu dina mémori. Ku alatan éta, leuwih saluran aya dina sambungan, éta RabbitMQ ngagunakeun leuwih memori pikeun ngatur sambungan sapertos kitu.

RabbitMQ. Bagian 1. Bubuka. Erlang, AMQP

Hiji conto basajan tina nyieun sambungan na channel ngagunakeun 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 
}

Muka sambungan anyar pikeun tiap operasi niatna discouraged sakumaha ieu bakal ngakibatkeun waragad luhur. Saluran ogé kedah pengkuh, tapi seueur kasalahan protokol nyababkeun saluran ditutup, ku kituna umur saluran tiasa langkung pondok tibatan sambungan.

Dimana RabbitMQ dianggo?

Dina konteks microservices, protokol AMQP sarta palaksanaan na di RabbitMQ mindeng dipaké pikeun interaksi asynchronous antara jasa.

Dina kontéks IIOT protokol AMQP sarta palaksanaan na di RabbitMQ dipaké pikeun bursa data antara server (server-server). Ogé ngagunakeun plugin nu MQTT Plugin RabbitMQ nu mangrupa palaksanaan protokol MQTT pikeun ngirimkeun data antara sénsor jeung server dina speed low, lingkungan latency tinggi (daptar lengkep protokol dirojong didaptarkeun di ramatloka proyék).

Dina artikel salajengna urang bakal ngawitan ngartos Bursa dina leuwih jéntré.

rujukan

sumber: www.habr.com

Tambahkeun komentar