Message queue — ishlab chiqaruvchi yuborgan xabarlarni iste’molchi olishigacha saqlaydigan asinxron aloqa vositasidir. U xizmatlarni vaqt bo‘yicha ajratadi: qabul qiluvchi ayni paytda ishlamayotgan bo‘lsa ham jo‘natuvchi xabarni navbatga topshirishi mumkin. Queue yukni tekislaydi, ammo yetkazish kafolati va xato siyosatini aniq loyihalashni talab qiladi.
Xabar hayot sikli
Producer xabar tanasi va metadata, masalan, identifikator, tur, vaqt va correlation ID yuboradi. Broker xabarni xotira yoki diskda saqlaydi va consumerga beradi. Consumer muvaffaqiyatli ishlovdan keyin acknowledgement yuboradi; tasdiq kelmasa xabar timeoutdan so‘ng qayta yetkazilishi mumkin.
At-most-once yetkazishda xabar yo‘qolishi mumkin, lekin takror kelmaydi. At-least-once yo‘qotishni kamaytiradi, ammo duplicate ehtimoli bor. “Exactly once” ko‘pincha broker, consumer holati va tashqi tizimni qamrab oladigan cheklangan semantikadir; marketing atamasini tranzaksiya chegarasi bilan tekshirish kerak.
Idempotent iste’molchi
At-least-once muhitida consumer bir xabarni qayta olsa ham natijani ikki marta qo‘llamasligi kerak. Message ID uchun inbox jadvali, biznesdagi noyob kalit yoki holat mashinasi idempotency beradi. Xabarni tasdiqlab, keyin bazaga yozish crashda yo‘qotadi; avval yozib, keyin tasdiqlash esa takror keltiradi. Tranzaksion inbox/outbox bu chegarani boshqaradi.
Poison message doim xato berib navbatni to‘sishi mumkin. Cheklangan retry, exponential backoff va dead-letter queue uni asosiy oqimdan ajratadi. DLQ xabar “unutildi” degani emas; egasi, alarm va qayta ishlash tartibi bo‘lishi kerak.
Tartib va parallelizm
Bitta queue ko‘pincha ma’lum darajada FIFO beradi, ammo bir nechta consumer va retry global tartibni buzishi mumkin. Partition key bir obyektga tegishli xabarlarni bitta bo‘limga yuborib, shu kalit ichida tartibni saqlaydi. Juda notekis kalit hot partition yaratadi.
Consumer group xabarni guruhdagi bitta iste’molchiga taqsimlaydi. Fan-out uchun alohida subscription yoki queue kerak, aks holda iste’molchilar bir-birining xabarini bo‘lishadi. Queue bilan publish-subscribe modeli shu nuqtada farqlanadi.
Backpressure va kuzatuv
Kirish tezligi qayta ishlashdan yuqori bo‘lsa backlog o‘sadi. Queue chuqurligi bilan birga eng eski xabar yoshi muhim: mingta tez vazifa normal, bitta soatlik xabar esa muammo bo‘lishi mumkin. Consumer concurrency, batch hajmi va prefetch tashqi baza limitiga moslanadi.
Xabar sxemasi versiyalanadi; yangi producer eski consumerni buzmasligi uchun backward compatibility saqlanadi. Maxfiy xabar shifrlanadi, broker ruxsatlari topic yoki queue bo‘yicha cheklanadi. Telemetriya enqueue rate, delivery latency, retry, DLQ va processing durationni ko‘rsatadi.
Operatsion boshqaruv
Broker klasterida replikatsiya va acknowledgement sozlamasi xabar diskka qanchalik mustahkam yozilganini belgilaydi. Producer publish tasdig‘ini olmasa, xabar yozilganmi yoki yo‘qmi noma’lum bo‘lishi mumkin; retry duplicate yaratadi. Shu holat ham idempotency talab qiladi. Queue sig‘imi, maksimal xabar hajmi va retention cheklanadi. Juda katta payloadni brokerda tashish o‘rniga obyekt saqlashga yozib, xabarda himoyalangan havola berilishi mumkin. Bunda fayl va xabar lifecycle bir-biriga mos keladi. Disaster recovery sinovi broker tiklanganda consumer offset, DLQ va shifrlash kalitlari ham mavjudligini tekshiradi.
Schema registry mavjud bo‘lsa uning versiyalari ham brokerdan alohida zaxiralanadi. Aks holda xabar saqlangan bo‘lsa-da, consumer uni talqin qila olmaydi. Replay production yon ta’sirini takrorlamasligi uchun alohida muhit yoki himoyalangan rejimda bajariladi. Eski xabar yangi consumer bilan compatibility testdan o‘tadi.
Bog‘liq tushunchalar
Message broker, Producer-consumer, Acknowledgement, Dead-letter queue, Idempotency, Backpressure