KelinciMQ. Bagian 2. Memahami Pertukaran

Exchange β€” penukar atau titik penukaran. Pesan dikirim ke sana. Exchange mendistribusikan pesan dalam satu atau lebih antrian. Dia merutekan pesan ke antrian berdasarkan koneksi yang dibuat (bindings) antara dia dan antrian.

Exchange tidak Proses Erlang. Untuk alasan skalabilitas exchange - ini adalah baris (tautan ke modul dengan kode tempat logika perutean berada) di database bawaan ingatan. 1 penukar hanya akan mengonsumsi 1 MB memori.

daftar isi

Pertukaran Langsung

Direct exchange - digunakan saat dibutuhkan mengirimkan pesan ke antrian tertentu. Pesan tersebut dipublikasikan ke penukar dengan spesifik kunci perutean dan masuk ke semua antrian yang terhubung ke penukar ini dengan kunci perutean yang serupa. Kunci peruteannya adalah string. Pencocokan ditemukan menggunakan memeriksa string untuk kesetaraan.

Representasi grafis dari aliran pesan:

KelinciMQ. Bagian 2. Memahami Pertukaran

Π’ rabbitmq ada sebuah konsep penukar default. Itu direct exchange tanpa nama. Jika penukar default digunakan, pesan akan dialihkan ke antrian dengan nama yang sama dengan kunci perutean pesan.

Pertukaran Topik

Topic exchange - serupa direct exchange mengaktifkan perutean selektif dengan membandingkan kunci perutean. Tapi, dalam hal ini, kuncinya diberikan oleh templat. Saat membuat template, gunakan 0 atau lebih kata (huruf AZ ΠΈ az dan angka 0-9), dipisahkan oleh titik, serta simbol * ΠΈ #.

  • * - bisa diganti dengan persis 1 kata itu
  • # - dapat diganti dengan 0 atau lebih kata

Representasi grafis dari aliran pesan:

KelinciMQ. Bagian 2. Memahami Pertukaran

Sejak versi RabbitMQ 2.4.0 algoritma perutean untuk topic exchange mulai bekerja sampai 145 kali lebih cepat. Mereka mencapai ini dengan memperkenalkan suatu pendekatan coba implementasi, yang melibatkan representasi pola sebagai struktur pohon. Misalnya template a.b.c, a.*.b.c, a.#.c ΠΈ b.b.c akan diwakili oleh struktur berikut:

KelinciMQ. Bagian 2. Memahami Pertukaran

Pencarian kecocokan suatu pola dilakukan dimulai dari akar dan dilanjutkan dari atas ke bawah.

Fitur:

  • penggunaan penukar ini bisa menjadi pilihan yang baik untuk kemungkinan pengembangan aplikasi di masa depan, Karena templat selalu dapat dikustomisasi sehingga pesan dipublikasikan dengan cara yang sama direct exchange ΠΈΠ»ΠΈ fanout exchange
  • template yang digunakan * lebih cepatdaripada template yang digunakan #.
  • topic exchange lebih lambat direct exchange

Pertukaran Fanout

Fanout exchange - semua pesan dikirim ke semua antrian meskipun kunci perutean ditentukan dalam pesan.

Fitur:

  • RabbitMQ tidak berfungsi dengan kunci perutean dan templat yang berdampak positif pada produktivitas. Ini yang tercepat exchange;
  • semua konsumen harus mampu memproses semua pesan;

Representasi grafis dari aliran pesan:

KelinciMQ. Bagian 2. Memahami Pertukaran

Pertukaran Header

Headers exchange - merutekan pesan ke antrian terkait berdasarkan perbandingan pasangan properti (kunci, nilai). headers binding dan properti pesan serupa. headers adalah a Dictionary<ΠΊΠ»ΡŽΡ‡, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅>.

Jika Anda menambahkan kunci khusus ke kamus x-match dengan makna any, lalu pesan dirutekan jika ada sebagian pasangan (kunci, nilai) yang cocok. Perilaku ini mirip dengan operator or.

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

Kunci bawaan x-match berisi nilai all. Ini berarti bahwa pesan dirutekan jika pasangan (kunci, nilai) sama persis. Perilaku ini mirip dengan operator and.

Representasi grafis dari aliran pesan:

KelinciMQ. Bagian 2. Memahami Pertukaran

Fitur:

  • fleksibilitas tambahan
  • tambahan overhead komputasi. Semua pasangan (kunci, nilai) suatu atribut headers harus diurutkan berdasarkan nama kunci sebelum menghitung nilai perutean pesan. Lebih lambat dibandingkan jenis pertukaran lainnya.

Pertukaran Hashing yang Konsisten

Penukar ini adalah plugin ΠΈ tidak terpasang Π² RabbitMQ.

Consistent-hashing exchange (pertukaran dengan hashing yang konsisten) - digunakan ketika ada beberapa antrian yang merupakan calon penerima pesan, dan ketika Anda perlu menyeimbangkan beban di antara mereka. Koneksi pesan dengan antrian terjadi berdasarkan bobot (nilai string bersyarat dari 0 - n).

Bobot antrian yang setara - menunjukkan bahwa setiap antrian akan menerima jumlah yang kurang lebih sama pesan (setiap pesan hanya akan ditempatkan dalam satu antrian). Tidak ada jaminan menyeluruh atas distribusi pesan yang seragam.

Representasi grafis dari aliran pesan:

KelinciMQ. Bagian 2. Memahami Pertukaran

Hash dihitung berdasarkan kunci perutean atau properti headers pesan. Jika semua pesan yang dipublikasikan memiliki kunci perutean yang berbeda atau headers, maka pendistribusiannya akan terjadi berdasarkan berat. Jika tidak, kunci perutean akan digunakan atau headers.

Seharusnya membantu ketika throughput konsumen perlu tumbuh lebih tinggi dibandingkan solusi dengan banyak konsumen yang menggunakan satu antrean.

Menggabungkan penukar (E2E)

Perilaku semua penukar dapat digabungkan melalui komunikasi Pertukaran-ke-Bursa (menggabungkan penukar tidak termasuk dalam spesifikasi AMQP. Ini merupakan perpanjangan protokol dari samping RabbitMQ).

Representasi grafis dari aliran pesan:

KelinciMQ. Bagian 2. Memahami Pertukaran

Dengan mengorbankan E2E kita dapat menemukan konfigurasi terukur yang tepat untuk memenuhi kebutuhan saat ini dan yang terus berkembang.

Buat Pertukaran

Penukar dibuat menggunakan sinkron RPC permintaan ke server. Permintaan dibuat menggunakan metode ini Exchange.Declaredipanggil dengan parameter:

  • nama penukar
  • tipe penukar
  • parameter lainnya

Contoh penciptaan exchange melalui RabbitMQ.Klien:

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

  • exchange β€” nama exchanger yang ingin kita buat. Namanya harus unik
  • type β€” jenis penukar
  • durable - jika dipasang true, Kemudian exchange akan bersifat permanen. Ini akan disimpan di disk dan dapat bertahan saat server/broker dihidupkan ulang. Jika nilainya false, Kemudian exchange bersifat sementara dan akan dihapus ketika server/broker di-boot ulang
  • autoDelete - penghapusan otomatis. Exchange akan dihapus ketika semua antrian yang terkait dengannya dihapus
  • arguments - argumen opsional. Paling sering, mereka menentukan melalui argumen alternative exchange (penukar alternatif). Jika suatu pesan tidak dapat berjalan sepanjang rute aslinya, pesan tersebut dapat dikirim ke penukar alternatif untuk dialihkan melalui jalur yang berbeda.

KelinciMQ. Bagian 2. Memahami Pertukaran

Jika penciptaan exchange mungkin, maka server akan mengirimkan klien secara sinkron RPC menjawab Exchange.DeclareOk. Jika penciptaan tidak mungkin (permintaan ditolak Exchange.Declare), kemudian saluran akan ditutup server menggunakan perintah asinkron Channel.Close dan klien akan menerima pengecualian OperasiInterruptedException, yang akan berisi kode kesalahan dan deskripsinya.

Penukar harus dibuat sebelum memposting pesan. Jika Anda memublikasikan pesan ke penukar yang tidak ada - RabbitMQ diam-diam akan menghapusnya.

Membuat Pertukaran melalui GUI

Buka panel admin RabbitMQ di bawah pengguna guest (nama belakang: guest dan kata sandi: guest). Harap dicatat bahwa pengguna guest hanya dapat terhubung dari localhost. Sekarang mari kita pergi ke tab Exchanges dan klik Add a new exchange. Isi propertinya:

KelinciMQ. Bagian 2. Memahami Pertukaran

Sebagian besar properti telah dijelaskan di atas. Di sini kita perhatikan bahwa jika kita mengatur Internal, maka pertukaran hanya dapat digunakan untuk E2E. Producer tidak akan dapat mengirim pesan ke pertukaran tersebut.

Kesimpulan

Saat mengembangkan suatu sistem, akan lebih mudah untuk menggambarkan topologinya rute menggunakan grafik. Namun sebelum Anda mulai membuat grafik, ada baiknya menyoroti jalur dengan lalu lintas tinggi, karena merekalah yang menuntut throughput yang lebih tinggi (pertunjukan). Selanjutnya, Anda dapat mengklasifikasikan lalu lintas. Dan baru kemudian mulai membangun.

Jika pada grafik yang dibangun ada himpunan terbatas kunci perutean, maka ada baiknya melihat beberapa fanout exchange, yang 1:1 terkait dengan kunci perutean. Kami ingat itu fanout exchange Tercepat.

Jika jumlah rute cenderung tak terhingga, maka Anda harus memperhatikan topic exchange atau, jika template tidak diperlukan, Anda dapat memilih direct exchnge, Karena dia lebih cepat topic exchange.

Kombinasi yang berbeda exchange akan membantu Anda menemukan yang tepat konfigurasi yang dapat diskalakan, yang memenuhi persyaratan sistem saat ini dan yang terus berkembang.

Nomor exchange dan antrian harus minimal dibandingkan dengan jumlah rute.

Pada artikel selanjutnya kita akan mulai memahami Queues dan Bindings lebih detail.

referensi

Sumber: www.habr.com

Tambah komentar