Exchange — RabbitMQning AMQP 0-9-1 modelida producer yuborgan xabarni routing qoidalari asosida bir yoki bir nechta queuega yo‘naltiradigan broker obyektidir. Producer odatda queuening o‘ziga emas, exchange nomiga publish qiladi. Exchange xabarni saqlamaydi; mos binding topilmasa va boshqa mexanizm belgilanmagan bo‘lsa xabar tashlab yuborilishi mumkin.
Routing jarayoni
Publish amali exchange, routing key, header va payloadni olib keladi. Exchange o‘z typeiga mos ravishda bindinglarni tekshiradi. Mos queue yoki boshqa exchange topilsa xabar nusxasi ularga yo‘naltiriladi. Bir xabar bir nechta queuega tushishi mumkin, shu sabab har consumer guruhi mustaqil nusxa oladi.
Exchange durable bo‘lsa broker restartidan keyin declaration saqlanadi. Auto-delete oxirgi binding yoki consumer bilan bog‘liq lifecycle shartida obyektni o‘chirishi mumkin. Declarationdagi type va durability mavjud exchange bilan mos kelmasa channel xato oladi.
Exchange turlari
Direct exchange routing key binding keyga aynan teng bo‘lsa yo‘naltiradi. Fanout routing keyni e’tiborsiz qoldirib barcha bound queuelarga tarqatadi. Topic exchange nuqta bilan ajratilgan so‘zlar va wildcard orqali pattern matching qiladi. Headers exchange routing key o‘rniga header atributlarini solishtiradi.
Topic bindingda * bitta so‘zga, # nol yoki undan ko‘p so‘zga mos keladi. Masalan, order.*.created ma’lum uch qismli patternni oladi. Juda keng # binding barcha routing keylarni qamrab, kutilmagan trafik va xarajat keltirishi mumkin.
Default va alternate exchange
RabbitMQda nomi bo‘sh default exchange direct exchange sifatida mavjud. Har queue odatda o‘z nomiga teng routing key bilan unga avtomatik binding oladi. Bu queuega bevosita yuborishga o‘xshaydi, ammo routing baribir exchange orqali bajariladi.
Alternate exchange asosiy exchangeda route topilmagan xabarlarni boshqa exchangega yuborishi mumkin. Publisherning mandatory flagi esa unroutable xabarni clientga qaytarish imkonini beradi. Ikkala mexanizm routing konfiguratsiyasi xatosida silent lossni kamaytiradi.
Exchange-to-exchange binding
RabbitMQ extensioni exchangeni boshqa exchangega bog‘lashga ruxsat beradi. Bu routing topologiyasini qatlamlash imkonini beradi, masalan tashqi eventlarni umumiy topic exchangedan xizmatga xos direct exchangega uzatish. Cycle va tushunarsiz zanjir diagnostikani qiyinlashtiradi, shuning uchun topology hujjatlashtiriladi.
Boshqaruv va xavfsizlik
Exchange yaratish, configure qilish va unga publish qilish alohida permissionlar bilan nazorat qilinadi. Producerga keng configure huquqi berish topology ni o‘zgartirish imkonini beradi. Definition infrastructure as code sifatida versionlanishi yoki application idempotent declaration bilan yaratishi mumkin.
Publish rate, unroutable count va binding soni monitoring qilinadi. Exchange mavjudligi queuening durabilitysi, xabarning persistence si yoki consumer ackini kafolatlamaydi; delivery zanjirining har qatlami alohida sozlanadi.
Internal va delayed routing
Internal exchangega client bevosita publish qila olmaydi; u faqat boshqa exchange orqali kelgan xabarni route qiladi. Bu murakkab topologyda tashqi entry point va ichki qatlamni ajratadi. Noto‘g‘ri internal flag producer publishini channel xatosiga olib kelishi mumkin.
Kechiktirilgan delivery asosiy AMQP exchange typeining universal xususiyati emas. RabbitMQ plugin, TTL va dead-letter kombinatsiyasi yoki tashqi scheduler ishlatilishi mumkin. Har variant tartib, resurs va restart semantikasiga ega. Exchange nomini “delayed” deb qo‘yishning o‘zi xabarni vaqt bo‘yicha ushlab turmaydi.
Bog‘liq tushunchalar
RabbitMQ, AMQP, Queue, Binding, Routing key, Topic exchange, Alternate exchange