RabbitMQ. Bahagian 2. Memahami Pertukaran

Exchange β€” penukar atau titik pertukaran. Mesej dihantar kepadanya. Exchange mengedarkan mesej dalam satu atau lebih baris gilir. Dia mengarahkan mesej ke baris gilir berdasarkan sambungan yang dibuat (bindings) antara dia dan barisan.

Exchange tidak Proses Erlang. Atas sebab kebolehskalaan exchange - ini adalah baris (pautan ke modul dengan kod di mana logik penghalaan terletak) dalam pangkalan data terbina dalam mnesia. 1 ribu penukar akan menggunakan hanya 1MB memori.

jadual kandungan

Pertukaran Langsung

Direct exchange - digunakan apabila diperlukan menyampaikan mesej kepada baris gilir tertentu. Mesej itu diterbitkan kepada penukar dengan khusus kunci penghalaan dan masuk ke dalam semua baris gilir yang disambungkan kepada penukar ini dengan kunci penghalaan yang serupa. Kunci penghalaan ialah rentetan. Padanan didapati menggunakan menyemak rentetan untuk kesetaraan.

Perwakilan grafik aliran mesej:

RabbitMQ. Bahagian 2. Memahami Pertukaran

Π’ rabbitmq ada konsep penukar lalai. Ia direct exchange tiada nama. Jika penukar lalai digunakan, mesej akan dihalakan ke baris gilir dengan nama yang sama dengan kunci penghalaan mesej.

Pertukaran Topik

Topic exchange – serupa direct exchange membolehkan penghalaan terpilih dengan membandingkan kekunci penghalaan. Tetapi, dalam kes ini, kunci diberikan mengikut templat. Apabila membuat templat, gunakan 0 atau lebih perkataan (huruf AZ ΠΈ az dan nombor 0-9), dipisahkan oleh titik, serta simbol * ΠΈ #.

  • * - boleh digantikan dengan tepat 1 perkataan itu
  • # - boleh digantikan dengan 0 atau lebih perkataan

Perwakilan grafik aliran mesej:

RabbitMQ. Bahagian 2. Memahami Pertukaran

Sejak versi RabbitMQ 2.4.0 algoritma penghalaan untuk topic exchange mula bekerja sehingga 145 kali lebih cepat. Mereka mencapai ini dengan memperkenalkan pendekatan cuba perlaksanaan, yang melibatkan mewakili corak sebagai struktur pokok. Contohnya templat a.b.c, a.*.b.c, a.#.c ΠΈ b.b.c akan diwakili oleh struktur berikut:

RabbitMQ. Bahagian 2. Memahami Pertukaran

Pencarian untuk memadankan corak dijalankan bermula dari akar dan meneruskan dari atas ke bawah.

Ciri-ciri:

  • penggunaan penukar ini boleh menjadi pilihan yang baik untuk kemungkinan pembangunan aplikasi pada masa hadapan, kerana templat sentiasa boleh disesuaikan supaya mesej diterbitkan dengan cara yang sama direct exchange atau fanout exchange
  • templat yang menggunakan * jauh lebih pantasdaripada templat yang digunakan #.
  • topic exchange lebih perlahan direct exchange

Pertukaran Fanout

Fanout exchange - semua mesej dihantar ke semua baris gilir walaupun kunci penghalaan dinyatakan dalam mesej.

Ciri-ciri:

  • RabbitMQ tidak berfungsi dengan kunci penghalaan dan templat yang mempunyai kesan positif terhadap produktiviti. Ini adalah yang terpantas exchange;
  • semua pengguna mesti boleh memproses semua mesej;

Perwakilan grafik aliran mesej:

RabbitMQ. Bahagian 2. Memahami Pertukaran

Pertukaran Tajuk

Headers exchange - laluan mesej ke baris gilir yang berkaitan berdasarkan perbandingan pasangan harta (kunci, nilai). headers pengikatan dan sifat mesej yang serupa. headers adalah a Dictionary<ΠΊΠ»ΡŽΡ‡, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅>.

Jika anda menambah kunci khas pada kamus x-match dengan makna any, maka mesej dihalakan jika terdapat padanan separa pasangan (kunci, nilai). Tingkah laku ini serupa dengan pengendali or.

var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");

Kekunci lalai x-match mengandungi nilai all. Ini bermakna bahawa mesej dihalakan jika pasangan (kunci, nilai) sepadan dengan tepat. Tingkah laku ini serupa dengan pengendali and.

Perwakilan grafik aliran mesej:

RabbitMQ. Bahagian 2. Memahami Pertukaran

Ciri-ciri:

  • fleksibiliti tambahan
  • overhed pengiraan tambahan. Semua (kunci, nilai) pasangan atribut headers mesti diisih mengikut nama kunci sebelum mengira nilai penghalaan mesej. Lebih perlahan daripada jenis pertukaran lain.

Pertukaran Hashing Konsisten

Penukar ini adalah pasangkan ΠΈ tidak terbina dalam Π² RabbitMQ.

Consistent-hashing exchange (pertukaran dengan pencincangan yang konsisten) - digunakan apabila terdapat beberapa baris gilir yang berpotensi sebagai penerima mesej, dan apabila anda perlu mengimbangi beban di antara mereka. Sambungan mesej dengan baris gilir berlaku mengikut berat (nilai rentetan bersyarat daripada 0 - n).

Berat baris gilir yang sama - menunjukkan bahawa setiap baris gilir akan menerima jumlah yang lebih kurang sama mesej (setiap mesej akan diletakkan dalam satu baris gilir sahaja). Tiada jaminan lengkap bagi pengedaran mesej yang seragam.

Perwakilan grafik aliran mesej:

RabbitMQ. Bahagian 2. Memahami Pertukaran

Hash dikira berdasarkan kunci penghalaan atau harta headers mesej. Jika semua mesej yang diterbitkan mempunyai kunci penghalaan yang berbeza atau headers, maka pengagihan akan berlaku mengikut berat. Jika tidak, kunci penghalaan akan digunakan atau headers.

Harus membantu apabila daya pengeluaran pengguna perlu berkembang lebih tinggi daripada penyelesaian dengan berbilang pengguna menggunakan satu baris gilir.

Menggabungkan penukar (E2E)

Tingkah laku semua penukar boleh digabungkan menggunakan komunikasi Tukar-ke-Tukar (menggabungkan penukar tidak termasuk dalam spesifikasi AMQP. Ini adalah lanjutan protokol dari sisi RabbitMQ).

Perwakilan grafik aliran mesej:

RabbitMQ. Bahagian 2. Memahami Pertukaran

Dengan perbelanjaan E2E kita boleh mencari konfigurasi berskala yang betul untuk memenuhi kedua-dua keperluan semasa dan yang semakin meningkat.

Buat Exchange

Penciptaan penukar berlaku menggunakan segerak RPC permintaan kepada pelayan. Permintaan dibuat menggunakan kaedah Exchange.Declaredipanggil dengan parameter:

  • nama penukar
  • jenis penukar
  • parameter lain

Contoh ciptaan exchange dengan cara RabbitMQ.Pelanggan:

//...
channel.ExchangeDeclare(
    exchange: "my_exchange",
    type: "direct",
    durable: "false",
    autoDelete: "false",
    arguments: null
);
//...

  • exchange β€” nama penukar yang ingin kami buat. Nama mesti unik
  • type - jenis penukar
  • durable - jika dipasang true, Kemudian exchange akan kekal. Ia akan disimpan pada cakera dan boleh bertahan apabila pelayan/broker dimulakan semula. Jika nilai false, Kemudian exchange adalah sementara dan akan dipadamkan apabila pelayan/broker dibut semula
  • autoDelete - penyingkiran automatik. Exchange akan dipadamkan apabila semua baris gilir yang berkaitan dengannya dipadamkan
  • arguments - hujah pilihan. Selalunya, mereka menentukan melalui hujah alternative exchange (penukar alternatif). Jika mesej tidak boleh bergerak di sepanjang laluan asal, ia boleh dihantar ke penukar ganti untuk dihalakan di sepanjang laluan yang berbeza.

RabbitMQ. Bahagian 2. Memahami Pertukaran

Jika penciptaan exchange mungkin, maka pelayan akan menghantar pelanggan segerak RPC menjawab Exchange.DeclareOk. Jika penciptaan mustahil (permintaan ditolak Exchange.Declarekemudian saluran akan ditutup pelayan menggunakan arahan tak segerak Channel.Close dan pelanggan akan menerima pengecualian OperationInterruptedException, yang akan mengandungi kod ralat dan penerangannya.

Penukar mesti dibuat sebelum menghantar mesej. Jika anda menerbitkan mesej kepada penukar yang tidak wujud - RabbitMQ akan mengeluarkannya secara senyap-senyap.

Mencipta Exchange melalui GUI

Pergi ke panel pentadbir RabbitMQ bawah pengguna guest (nama pengguna: guest dan kata laluan: guest). Sila ambil perhatian bahawa pengguna guest hanya boleh menyambung dari localhost. Sekarang mari pergi ke tab Exchanges dan klik pada Add a new exchange. Isikan sifat:

RabbitMQ. Bahagian 2. Memahami Pertukaran

Kebanyakan sifat telah diterangkan di atas. Di sini kita perhatikan bahawa jika kita tetapkan Internal, maka pertukaran hanya boleh digunakan untuk E2E. Producer tidak akan dapat menghantar mesej kepada pertukaran sedemikian.

Kesimpulan

Apabila membangunkan sistem, adalah mudah untuk menerangkan topologi penghalaan menggunakan graf. Tetapi sebelum anda mula membina graf, adalah wajar untuk menyerlahkan laluan dengan trafik yang tinggi, kerana merekalah yang menuntut daya pengeluaran yang lebih tinggi (prestasi). Seterusnya, anda boleh mengklasifikasikan trafik. Dan hanya kemudian mula membina.

Jika dalam graf yang dibina ada set terhingga kekunci penghalaan, maka ia patut melihat ke arah beberapa fanout exchange, iaitu 1:1 berkaitan dengan kunci penghalaan. Kami ingat itu fanout exchange yang terpantas.

Jika bilangan laluan cenderung kepada infiniti, maka anda harus memberi perhatian kepada topic exchange atau, jika templat tidak diperlukan, anda boleh memilih direct exchnge, kerana dia lebih laju topic exchange.

Gabungan yang berbeza exchange harus membantu anda mencari yang betul konfigurasi berskala, yang memenuhi kedua-dua keperluan sistem semasa dan berkembang.

Bilangan exchange dan baris gilir hendaklah minimum berbanding dengan bilangan laluan.

Dalam artikel seterusnya kita akan mula memahami Baris Gilir dan Pengikatan dengan lebih terperinci.

rujukan

Sumber: www.habr.com

Tambah komen