Choose a message queue solution
กรณีที่ใช้ Service Bus queues
- ตัว Receiver แล้วไม่ต้องการจะดึงตัว Message ออกไปจาก Queue ทันที โดยใช้เทคนิค long-polling ของ Service Bus (เรื่อง long-pollling ดูนี้เพิ่มได้ System Design: Long polling, WebSockets, Server-Sent Events (SSE) - DEV Community 👩💻👨💻)
- guaranteed first-in-first-out (FIFO) ordered
- support automatic duplicate detection และต้องการ Track State ของ Message ได้ ว่าถูก Receriver / Consumer อ่านไปหรือยังจาก Key (Session ID)
- transactional behavior + atomicity
- Load-leveling benefit - กระจายภาระ App ทำให้เกิด Average Peak (Performance needs to handle average load)
- ขนาดของ Message อยู่ระหว่าง 64-256 KB (100 MB - ถ้าซื้อ {Premium Service)
กรณีที่ใช้ Storage queues
- App ต้องใช้พื้นที่ 80 GB สำหรับ Message 1 ชิ้นใน Queue และต้องการจะ Track Progress ด้วย
- Server Side Log
- Azure Service Bus
- เป็น message broker ช่วยลด coupling ระหว่าง service ทำ microservice นั้นเอง โดยจะสื่อสารผ่าน message แทน format มีรูปแบบ JSON, XML, Apache Avro, Plain Text หรือจะทำในลักษณะ
- Topics and subscriptions - 1:n relationships
- Message sessions - เป็น State ของ Workflow ไว้
- Protocol - Advanced Messaging Queueing Protocol (AMQP) 1.0
- Scenario
- Messaging
- Decouple applications - Improve reliability and scalability
- Topics and subscriptions - 1:n relationships between publishers and subscribers.
- Message sessions - Queue / Workflow
- Advanced features - Explore Azure Service Bus - Learn | Microsoft Docs
- Message sessions: Queues - First In, First Out (FIFO) ลดภาระปลายทาง load-leveling
- Autoforwarding
- Dead-letter queue: DLQ (คิวที่ทำไม่สำเร็จ) กรณีที่ต้อง Handle ต่อหรือ Retry Mechanism
- Scheduled delivery
- Message deferral
- Batching
- Transactions
- Filtering and actions: กำหนด subscription และตัว rules
- Duplicate detection
- Security protocols
- Geo-disaster recovery
- Security - รองรับ SAS / RBAC และ Protocol อย่าง AMQP 1.0 //Comply ตาม Standard ด้วย - Client libraries - Azure SDK
- Receive modes
- Receive and delete - อ่าน และเมื่อเอาไป Process จะลบออก ถ้าระหว่าง Process มี Error ชิ้นงานนี้จะตกหล่นไป
- Peek lock - two-stage receive operation
- lock - message ถูกอ่าน นำไปประมวลผล ระบบ mark เป็น lock
- เมื่อ Process เสร็จ ถูกปรับ State = consumed แต่ถ้ามี Error หรือเกิด Timeout จะคลาย Lock ออกมา
- Topics and subscriptions
- A queue allows processing of a message by a single consumer
- topics and subscriptions provide a one-to-many - จะรับ หรือไม่ขึ้นกับ filter actions
- Note : Discover Service Bus queues, topics, and subscriptions - Learn | Microsoft Docs
- Service Bus Topic Filter (Azure Service Bus topic filters)
- SQL Filter = เหมือน SQL
- Boolean Filter
- True Filter
- False Filter
- Correlation Filter - Set ของ Field เอามา And เป็นเงื่อนไข
#Correlation Filter var filter = new CorrelationRuleFilter(); filter.Label = "Important"; filter.ReplyTo = "johndoe@contoso.com"; filter.Properties["color"] = "Red"; #SQL Filter sys.ReplyTo = 'johndoe@contoso.com' AND sys.Label = 'Important' AND color = 'Red'
- ตัวอย่างการเลือกใช้ Service Bus Topic Filter
Azure Service Bus | Description | Filter |
---|---|---|
LaterTx | Used this subscription when other subscription cannot accept any tx at the moment | SQL Filter |
HighPriorityTx | High all high priority tx (By using CorreactionId) | Correlation Filter |
GlobalTx | Here the tx where exchange in not in Thailand | SQL Filter |
HighTx | Here the tx where quality >= 500,000 THB | SQL Filter |
AllTx | For auditing, all Tx must be send here | Boolean Filter (True) / No Filter |
- Explore Service Bus message payloads and serialization
- Message routing and correlation
- Simple request/reply:
- Multicast request/reply:
- Multiplexing: streams of related messages / matching by
SessionId
values - Multiplexed request/reply:
- Payload serialization - JSON / AMQP protocol
- C# Class
- ServiceBusClient
- ServiceBusSender
- เวลา Implement Service Bus ต้องทำจาก namespace > topic > subscription
- Azure Queue Storage
- components
- Storage account -
- URL format - สำหรับเข้า Storage
https://myaccount.queue.core.windows.net/images-to-download
- Queue - queue name ต้องเป็นตัว lowercase
- Message - 64 KB in size
- C# Class
- QueueClient
Knowledge check - Discover Azure message queues (Knowledge check)
Reference
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.