Message — dastur komponentlari, jarayonlar yoki tarmoq tugunlari orasida uzatiladigan ma’lumot birligi. U buyruq, hodisa, so‘rov, javob yoki telemetriya yozuvini ifodalashi mumkin. Message payload bilan birga identifikator, vaqt, tur, manba va correlation kabi metadata olib yuradi. Xabar almashish tomonlarni bevosita funksiya chaqiruvidan ko‘ra bo‘shroq bog‘lashga xizmat qiladi.
Semantik turlar
Command qabul qiluvchidan amal bajarishni so‘raydi: CreateOrder. Event allaqachon sodir bo‘lgan faktni bildiradi: OrderCreated. Query ma’lumot so‘raydi va odatda javob kutadi. Bir xabarni event deb nomlab, ichida majburiy buyruq yashirish consumerlar o‘rtasidagi mas’uliyatni noaniq qiladi.
Payload JSON, Avro, Protocol Buffers yoki boshqa formatda bo‘lishi mumkin. Envelope transportga umumiy message_id, type, schema_version, timestamp va tracing kontekstini beradi. Biznes ma’lumoti transport headerlari bilan keragidan ortiq aralashtirilmaydi.
Yetkazib berish
Message broker producer’dan xabar qabul qilib, queue yoki topic orqali consumerga yetkazadi. At-most-once’da xabar yo‘qolishi mumkin, lekin takrorlanmaydi. At-least-once’da qayta yetkazish sabab consumer bir xabarni bir necha marta ko‘rishi mumkin. “Exactly once” odatda muayyan broker va transaction chegarasidagi kafolat bo‘lib, tashqi database yoki email effektini avtomatik qamramaydi.
Consumer idempotent bo‘lsa bir xil message ID qayta kelganda natija takror yaratilmaydi. Deduplication jadvali va biznes update bitta transactionda bajarilishi kerak; aks holda crash oralig‘ida bittasi yozilib, boshqasi qolishi mumkin. Outbox pattern biznes transaction bilan publish ni muvofiqlashtiradi.
Tartib va oqim
Global ordering qimmat va ko‘pincha shart emas. Partition key bir entity, masalan order ID bo‘yicha tartibni saqlashi mumkin. Bir nechta consumer parallel ishlaganda turli partitionlar mustaqil qayta ishlanadi. Rebalance va retry tartibga ta’sir qilishi sabab biznes mantiq version yoki sequence number bilan eskirgan eventni aniqlaydi.
Producer consumerdan tez bo‘lsa backlog o‘sadi. Queue depth, oldest message age va processing rate monitoring qilinadi. Backpressure inputni sekinlashtiradi yoki kapasitetni oshiradi. Cheksiz retry “poison message”ni doimiy aylantiradi; urinish chegarasidan so‘ng dead-letter queue va operator tekshiruvi qo‘llanadi.
Evolyutsiya va xavfsizlik
Schema registry producer va consumer mosligini tekshirishi mumkin. Yangi optional field eski consumerga zarar bermaydi, ammo enum qiymati qo‘shilishi switch’ning default holatini talab qiladi. Event tarixiy fakt bo‘lgani uchun uning ma’nosini orqaga qarab o‘zgartirish xavfli; yangi versiya yoki yangi event turi ishlatiladi.
Broker authentication va topic authorization bilan himoyalanadi. Payload’da shaxsiy ma’lumot bo‘lsa retention, encryption va consumer ro‘yxati cheklanadi. Logga butun message yozish sirlarni oshkor qilishi mumkin. Ishonchsiz message deserialize qilinayotganda type allowlist, hajm va nesting limiti qo‘llanadi.
Kuzatuv
Correlation ID bitta biznes oqimidagi xabarlarni bog‘laydi, causation ID esa qaysi xabar yangisini keltirib chiqarganini ko‘rsatadi. Trace context asynchronous chegaradan o‘tkaziladi. Processing latency faqat consumer vaqti emas; queue’da kutish muddati bilan birga o‘lchanadi.
Xabar hajmi va tashqi payload
Broker xabar hajmiga limit qo‘yadi. Juda katta faylni queue ichiga joylash storage, replication va retry narxini oshiradi. Amalda fayl object storage’da saqlanib, message uning immutable manzili, hajmi, checksum’i va access shartini olib yuradi. Consumer yuklab olgach checksumni tekshiradi; manzilning amal muddati qayta ishlash va retry oynasidan qisqa bo‘lmasligi kerak.
Payload compression bandwidthni kamaytiradi, ammo consumer decompressed hajmga limit qo‘yadi. Turli content encodinglar envelope’da aniq ko‘rsatiladi. Encryption kerak bo‘lsa broker transportidan tashqari message-level shifrlash ishlatilishi mumkin; key rotation va dead-letter’dagi eski xabarni ochish ehtiyoji oldindan rejalashtiriladi.
Bog‘liq tushunchalar
Message queue, Event, Command, Message broker, Publish-subscribe, Idempotency, Dead-letter queue