[AZ-204] Develop message-based solutions

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 BusDescriptionFilter
LaterTxUsed this subscription when other subscription cannot accept any tx at the momentSQL Filter
HighPriorityTxHigh all high priority tx (By using CorreactionId)Correlation Filter
GlobalTxHere the tx where exchange in not in ThailandSQL Filter
HighTxHere the tx where quality >= 500,000 THBSQL Filter
AllTxFor auditing, all Tx must be send hereBoolean 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.