RabbitMQ. 2-qism. Birjalarni tushunish

Exchange - almashtirgich yoki almashtirish punkti. Unga xabarlar yuboriladi. Exchange xabarni tarqatadi bir yoki bir nechta navbatda. U xabarlarni navbatga yo'naltiradi yaratilgan havolalar asosida (bindings) u va navbat o'rtasida.

Exchange emas Erlang jarayoni. Kengaytirish sabablari uchun exchange - bu o'rnatilgan ma'lumotlar bazasidagi chiziq (marshrutlash mantig'i joylashgan kodli modulga havola) mneziya. 1 ming almashtirgich faqat 1 MB xotirani iste'mol qiladi.

Mundarija

  • RabbitMQ. 1-qism. Kirish. Erlang, AMQP va RPC
  • RabbitMQ. 2-qism. Birjalarni tushunish
  • RabbitMQ. 3-qism. Navbatlar va bog'lashlarni tushunish
  • RabbitMQ. 4-qism. Xabarlar va ramkalar nima ekanligini tushunish
  • RabbitMQ. 5-qism: Xabarni nashr qilish va iste'mol qilish
  • RabbitMQ. 6-qism. Federatsiya va belkurak modullarining umumiy ko'rinishi
  • RabbitMQ. 7-qism. Ulanish va Chanel haqida tafsilotlar
  • RabbitMQ. 8-qism. .NETda RabbitMQ
  • RabbitMQ. 9-qism. Monitoring

To'g'ridan-to'g'ri almashinuv

Direct exchange - kerak bo'lganda foydalaniladi xabarlarni ma'lum navbatlarga yetkazib berish. Xabar ma'lum bir bilan almashtirgichga e'lon qilinadi marshrut kaliti va shunga o'xshash marshrutlash kaliti bilan ushbu almashtirgichga ulangan barcha navbatlarga kiradi. Marshrutlash kaliti qatordir. Muvofiqlik yordamida topiladi satrlarni tenglik uchun tekshirish.

Xabar oqimining grafik tasviri:

RabbitMQ. 2-qism. Birjalarni tushunish

В rabbitmq tushunchasi bor standart almashtirgich. bu direct exchange ism yo'q. Agar standart almashtirgich ishlatilsa, u holda xabar ismga teng bo'lgan navbatga yo'naltiriladi xabarni yo'naltirish kaliti.

Mavzu almashinuvi

Topic exchange - o'xshash direct exchange marshrutlash kalitini solishtirish orqali tanlab marshrutlash imkonini beradi. Ammo, bu holda, kalit beriladi shablon bo'yicha. Shablonni yaratishda foydalaning 0 yoki ko'proq so'zlar (harflar AZ и az va raqamlar 0-9), nuqta bilan, shuningdek, belgilar bilan ajratilgan * и #.

  • * - aniq bilan almashtirilishi mumkin 1 so'z
  • # - bilan almashtirilishi mumkin 0 yoki ko'proq so'zlar

Xabar oqimining grafik tasviri:

RabbitMQ. 2-qism. Birjalarni tushunish

Versiyadan boshlab RabbitMQ 2.4.0 uchun marshrutlash algoritmi topic exchange gacha ishlay boshladi 145 marta tezroq. Ular yondashuvni amalga oshirish orqali bunga erishdilar amalga oshirishga harakat qiling, bu shablonlarning daraxt tuzilishi sifatida ifodalanishini nazarda tutadi. Misol uchun shablonlar a.b.c, a.*.b.c, a.#.c и b.b.c quyidagi tuzilma bilan ifodalanadi:

RabbitMQ. 2-qism. Birjalarni tushunish

Naqshga mos keladigan izlanish ildizdan boshlab va yuqoridan pastga qarab amalga oshiriladi.

Xususiyatlar:

  • bu almashtirgichdan foydalanish mumkin kelajakda mumkin bo'lgan ilovalarni ishlab chiqish uchun yaxshi tanlov, chunki shablonlarni har doim shunday sozlash mumkinki, xabar xuddi shu tarzda chop etiladi direct exchange yoki fanout exchange
  • foydalanadigan shablonlar * ancha tezroqfoydalanadigan shablonlarga qaraganda #.
  • topic exchange Sekinroq direct exchange

Fanout almashinuvi

Fanout exchange - barcha xabarlar barcha navbatlarga yetkaziladi xatda marshrutlash kaliti ko'rsatilgan bo'lsa ham.

Xususiyatlar:

  • RabbitMQ marshrutlash kalitlari va shablonlari bilan ishlamaydi ishlashga ijobiy ta'sir ko'rsatadi. Bu eng tez exchange;
  • barcha iste'molchilar barcha xabarlarni qayta ishlash imkoniyatiga ega bo'lishi kerak;

Xabar oqimining grafik tasviri:

RabbitMQ. 2-qism. Birjalarni tushunish

Sarlavhalar almashinuvi

Headers exchange - juft (kalit, qiymat) xususiyatlarni taqqoslash asosida tegishli navbatlarga xabarlarni yo'naltiradi headers bog'lovchi va shunga o'xshash xabar xususiyati. headers o'zida aks ettiradi Dictionary<ключ, значение>.

Agar siz lug'atga maxsus kalit qo'shsangiz x-match ma'nosi bilan any, keyin (kalit, qiymat) juftliklarining qisman mosligi bo'lsa, xabar yo'naltiriladi. Ushbu harakat operatorga o'xshaydi or.

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

Standart kalit x-match qiymatni o'z ichiga oladi all. Bu juftliklar (kalit, qiymat) to'liq mos kelganda xabar yo'naltiriladi degan ma'noni anglatadi. Ushbu harakat operatorga o'xshaydi and.

Xabar oqimining grafik tasviri:

RabbitMQ. 2-qism. Birjalarni tushunish

Xususiyatlar:

  • qo'shimcha moslashuvchanlik
  • qo'shimcha hisoblash xarajatlari. Atributning barcha juftlari (kalit, qiymat). headers Xabar marshrutlash qiymatlarini hisoblashdan oldin kalit nomi bo'yicha saralanishi kerak. Boshqa almashinuv turlariga qaraganda sekinroq.

Doimiy xashing almashinuvi

Bu almashtirgich plagin и qurilgan emas в RabbitMQ.

Consistent-hashing exchange (doimiy xeshlash bilan almashish) - xabarning potentsial oluvchisi bo'lgan bir nechta navbatlar mavjud bo'lganda va ular orasidagi yukni muvozanatlash kerak bo'lganda foydalaniladi. Xabar vazn bo'yicha navbat bilan bog'langan (shartli satr qiymati 0 - n).

Navbatlarning ekvivalent og'irligi - har bir navbat qabul qilinishini ko'rsatadi taxminan bir xil miqdorda xabarlar (har bir xabar faqat bitta navbatda joylashtiriladi). Xabarlarni bir xil taqsimlashning to'liq kafolati yo'q.

Xabar oqimining grafik tasviri:

RabbitMQ. 2-qism. Birjalarni tushunish

Hash marshrutlash kaliti yoki xususiyati asosida hisoblab chiqiladi headers xabarlar. Agar barcha nashr etilgan xabarlarda turli marshrutlash kalitlari bo'lsa yoki headers, keyin taqsimot og'irlik bo'yicha sodir bo'ladi. Aks holda, marshrutlash kaliti ishlatiladi, yoki headers.

Iste'molchi o'tkazuvchanligi bir xil navbatdan foydalanadigan bir nechta iste'molchilar bilan yechimdan yuqoriroq o'sishi kerak bo'lganda yordam berishi kerak.

Almashtirgichlar kombinatsiyasi (E2E)

Barcha almashinuvchilarning xatti-harakatlari aloqa yordamida birlashtirilishi mumkin Birjadan birjaga (birlashtiruvchi almashtirgichlar spetsifikatsiyaga kiritilmagan AMQP. Bu yon tomondan protokol kengaytmasi RabbitMQ).

Xabar oqimining grafik tasviri:

RabbitMQ. 2-qism. Birjalarni tushunish

Hisobidan E2E biz hozirgi va o'sib borayotgan talablarga javob beradigan to'g'ri kengaytiriladigan konfiguratsiyani topa olamiz.

Birja yarating

Eşanjör sinxron yordamida yaratiladi RPC serverga so'rov yuborish. So'rov usul yordamida amalga oshiriladi Exchange.Declareparametrlar bilan chaqiriladi:

  • almashtirgich nomi
  • almashtirgich turi
  • boshqa variantlar

Yaratilish namunasi exchange yordamida RabbitMQ.Client:

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

  • exchange - biz yaratmoqchi bo'lgan almashtirgichning nomi. Ism noyob bo'lishi kerak
  • type - almashtirgich turi
  • durable - o'rnatilgan bo'lsa trueso'ng exchange doimiy bo'ladi. U diskda saqlanadi va server/broker qayta ishga tushirilganda omon qolishi mumkin. Agar qiymat bo'lsa falseso'ng exchange vaqtinchalik va server/broker qayta ishga tushirilganda oʻchiriladi
  • autoDelete - avtomatik o'chirish. Exchange u bilan bog'liq barcha navbatlar o'chirilganda o'chiriladi
  • arguments ixtiyoriy argumentlardir. Ko'pincha, o'rnatilgan argumentlar orqali alternative exchange (muqobil almashtirgich). Agar xabar asl marshrut bo'ylab harakatlana olmasa, uni boshqa yo'l bo'ylab yo'naltirish uchun muqobil almashtirgichga yuborish mumkin.

RabbitMQ. 2-qism. Birjalarni tushunish

Agar yaratilish exchange ehtimol, keyin server mijozga sinxron xabar yuboradi RPC javob berish Exchange.DeclareOk. Agar yaratilish mumkin emas (so'rov bo'yicha rad javobi bor edi Exchange.Declare), keyin kanal yopiladi asinxron buyruq yordamida server Channel.Close va mijoz istisnoga ega bo'ladi OperationInterruptedException, unda xato kodi va uning tavsifi mavjud.

Joylashtirishdan oldin almashtirgich yaratilishi kerak. Agar siz mavjud bo'lmagan almashtirgichga xabar e'lon qilsangiz - RabbitMQ jimgina olib tashlang.

Exchange GUI yarating

Administrator paneliga o'ting RabbitMQ foydalanuvchi ostida guest (foydalanuvchi nomi: guest va parol: guest). E'tibor bering, foydalanuvchi guest faqat localhost-dan ulanishi mumkin. Endi tabga o'tamiz Exchanges va ustiga bosing Add a new exchange. Xususiyatlarni to'ldiring:

RabbitMQ. 2-qism. Birjalarni tushunish

Ko'pgina xususiyatlar yuqorida tavsiflangan. Bu erda biz o'rnatgan bo'lsak, shuni ta'kidlaymiz Internal, keyin almashinuv faqat uchun ishlatilishi mumkin E2E. Producer bunday almashinuvga xabar yubora olmaydi.

xulosa

Tizimni ishlab chiqishda topologiyani tavsiflash qulay marshrutlash grafik yordamida. Ammo grafikni qurishni boshlashdan oldin, yuqori trafik bo'lgan yo'llarni ajratib ko'rsatishga arziydi, chunki. talab qiladilar yuqori o'tkazuvchanlik (ishlash). Keyinchalik, siz trafikni tasniflashingiz mumkin. Va keyin qurishni boshlang.

Agar tuzilgan grafikda mavjud bo'lsa chekli to'plam marshrutlash kalitlari, keyin, u bir necha tomon qarash arziydi fanout exchange, ular 1:1 marshrutlash kaliti bilan bog'liq. Shuni yodda tuting fanout exchange eng tez.

Agar marshrutlar soni cheksizlikka intiladi, unda siz e'tibor berishingiz kerak topic exchange yoki, agar shablon kerak bo'lmasa, siz tanlashingiz mumkin direct exchnge, chunki u tezroq topic exchange.

Turli xil kombinatsiyalar exchange to'g'ri topishga yordam berishi kerak. kengaytiriladigan konfiguratsiya, bu joriy va o'sib borayotgan tizim talablariga javob beradi.

soni exchange va navbatlar marshrutlar soniga nisbatan minimal bo'lishi kerak.

Keyingi maqolada biz navbatlar va bog'lashlar haqida ko'proq tushunishni boshlaymiz.

Manbalar

Manba: www.habr.com

a Izoh qo'shish