KelinciMQ. Bagean 1. Pambuka. Erlang, AMQP

Sugeng siang, Habr! Aku pengin nuduhake buku-buku referensi buku kawruh sing aku ngatur kanggo ngumpulake ing RabbitMQ lan condensed menyang Rekomendasi singkat lan kesimpulan.

Daftar Isi

  • KelinciMQ. Bagean 1. Pambuka. Erlang, AMQP lan RPC
  • KelinciMQ. Part 2. Understanding Exchanges
  • KelinciMQ. Part 3. Understanding Queues lan Bindings
  • KelinciMQ. Part 4. Pangerten apa pesen lan pigura
  • KelinciMQ. Part 5: Publishing lan Konsumsi Kinerja Pesen
  • KelinciMQ. Part 6. Ringkesan Federasi lan Modul Shovel
  • KelinciMQ. Part 7. Rincian babagan Sambungan lan Chanel
  • KelinciMQ. Part 8. RabbitMQ ing .NET
  • KelinciMQ. Bagean 9. Ngawasi

Sedhela babagan AMQP

AMQP (Advanced Message Queuing Protocol) minangka protokol mbukak kanggo ngirim pesen antarane komponen sistem. Ide dhasar yaiku subsistem individu (utawa aplikasi independen) bisa ngganti pesen kanthi cara sing sewenang-wenang liwat broker AMQP, sing nindakake rute, bisa uga njamin pangiriman, nyebarake aliran data, lan langganan jinis pesen sing dikarepake.

Protokol AMQP ngenalake telung konsep:

KelinciMQ. Bagean 1. Pambuka. Erlang, AMQP

  • exchange (titik ijol-ijolan utawa ijol-ijolan) - pesen dikirim menyang. Titik ijol-ijolan mbagekke pesen ing siji utawa luwih antrian. dheweke nuntun pesen menyang antrian adhedhasar pranala sing digawe (binding) antarane dheweke lan antrian
  • queue (antri) - struktur data ing disk utawa ing RAM sing nyimpen pranala menyang pesen lan menehi salinan pesen consumers (kanggo konsumen)
  • binding (naleni) - aturan sing ngandhani titik ijol-ijolan sing antri pesen kasebut kudu mlebu

Protokol mlaku ing ndhuwur TCP / IP.

Sedhela babagan Erlang

Kode sumber proyek ana ing gudang ing GitHub. Arsitektur RabbitMQ-server adhedhasar erlang lan BEAM.

Erlang dikembangake dening perusahaan Ericsson ing pertengahan 1980-an minangka sistem wektu nyata sing disebarake, fault-tolerant, kanggo aplikasi sing mbutuhake 99,999% uptime. Erlang digunakake ing macem-macem industri lan aplikasi modern, f.eks. WhatsApp. Sampeyan bisa maca liyane ing artikel Arsitektur WhatsApp, sing dituku Facebook kanggo $ 19 milyar

Sedhela babagan RabbitMQ

KelinciMQ iku broker pesen open source. Iki nuntun pesen ing kabeh prinsip dhasar protokol AMQP diterangake ing spesifikasi. RabbitMQ ngleksanakake lan nambah protokol AMQP.

Gagasan utama model olahpesen ing RabbitMQ bab punika producer (penerbit) ora ngirim pesen langsung menyang antrian. Nyatane, lan asring, penerbit ora ngerti manawa pesen kasebut bakal dikirim menyang antrian apa wae.

Nanging, penerbit mung bisa ngirim pesen menyang ijol-ijolan. Ing tangan siji, ijol-ijolan nampa pesen saka penerbit, lan ing sisih liya, dikirim menyang antrian. Ijol-ijolan kudu ngerti persis apa sing kudu ditindakake karo pesen sing ditampa. Apa kudu ditambahake menyang antrian tartamtu? Apa kudu ditambahake menyang pirang-pirang antrian? Utawa pesen kudu digatèkaké.

KelinciMQ. Bagean 1. Pambuka. Erlang, AMQP

Karya singkat RabbitMQ bisa diterangake kaya ing ngisor iki:

  1. Penerbit ngirim pesen menyang ijol-ijolan tartamtu
  2. Ijol-ijolan, sawise nampa pesen, nuntun menyang siji utawa luwih antrian sesuai karo aturan sing ana ing antarane lan antrian.
  3. Antrian nyimpen referensi kanggo pesen iki. Pesen kasebut dhewe disimpen ing RAM utawa ing disk
  4. Sawise konsumen siyap nampa pesen saka antrian, server nggawe salinan pesen liwat link lan ngirim
  5. Konsumen nampa pesen lan ngirim konfirmasi menyang makelar
  6. Broker, sawise nampa konfirmasi, mbusak salinan pesen saka antrian. Banjur mbusak saka RAM lan disk

CPR

proses RPC (remote procedure call) ndasari meh kabeh interaksi karo inti RabbitMQ. Contone, diskusi awal babagan syarat klien karo RabbitMQ, nuduhake proses tartamtu RPC. Sawise urutan iki rampung, RabbitMQ bakal siap nampa panjalukan saka klien:

KelinciMQ. Bagean 1. Pambuka. Erlang, AMQP

Uga ing specifications AMQP loro klien lan server bisa ngetokake printah. Iki tegese klien nunggu kanggo komunikasi karo server. Prentah minangka kelas lan metode. Tuladhane, Connection.Start - cara nelpon Start kelas Connection.

Sambungan lan saluran

Kanggo pertukaran informasi kasebut antarane klien lan server, saluran. Saluran digawe ing sambungan tartamtu. Saben saluran diisolasi saka saluran liyane. Ing kasus sinkron, iku ora bisa kanggo nglakokaké printah sabanjuré nganti respon ditampa.

Supaya bisa ngirim printah ing podo karo, sampeyan kudu mbukak sawetara saluran. Saben saluran nggawe kapisah Erlang proses. Siji sambungan bisa duwe sawetara saluran (multiplexing). Kanggo saben saluran ana struktur lan obyek tartamtu ing memori. Mulane, luwih akeh saluran ana ing sambungan, ing RabbitMQ nggunakake memori luwih akeh kanggo ngatur sambungan kuwi.

KelinciMQ. Bagean 1. Pambuka. Erlang, AMQP

Conto prasaja nggawe sambungan lan saluran nggunakake 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 
}

Mbukak sambungan anyar kanggo saben operasi banget pundung minangka iki bakal mimpin kanggo biaya dhuwur. Saluran uga kudu terus-terusan, nanging akeh kesalahan protokol sing nyebabake saluran ditutup, saengga umur saluran bisa luwih cendhek tinimbang sambungan kasebut.

Where RabbitMQ digunakake?

Ing konteks microservices, protokol AMQP lan implementasine ing RabbitMQ asring digunakake kanggo interaksi asinkron antarane layanan.

Ing konteks IIOT protokol AMQP lan implementasine ing RabbitMQ digunakake kanggo ijol-ijolan data antarane server (server-server). Uga nggunakake plugin MQTT Plugin RabbitMQ kang minangka implementasine saka protokol MQTT kanggo ngirim data antarane sensor lan server ing kacepetan kurang, lingkungan latency dhuwur (dhaptar lengkap protokol sing didhukung didaftar ing situs web proyek).

Ing artikel sabanjure kita bakal miwiti ngerteni Exchanges kanthi luwih rinci.

referensi

Source: www.habr.com

Add a comment