Exchange - almashtirgich yoki almashtirish punkti. Unga xabarlar yuboriladi. Exchangexabarni 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.
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 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:
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:
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:
RabbitMQmarshrutlash 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:
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:
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:
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:
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:
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.
Agar yaratilish exchangeehtimol, 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:
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.