Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Message Queue

Overview

Message Queue là một architectural pattern cho phép các components giao tiếp với nhau một cách asynchronous thông qua messages. Trong hệ thống phân tán, message queues đóng vai trò thiết yếu trong việc decouple producers và consumers, đảm bảo reliable delivery và enable scaling.

┌─────────────────────────────────────────────────────────────────┐
│                    MESSAGE QUEUE ARCHITECTURE                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│   Producer              Queue              Consumer             │
│       │                  │                    │                 │
│       │   ┌──────────┐   │                    │                 │
│       ├──▶│ Message  │──▶│                    │                 │
│       │   └──────────┘   │   ┌──────────┐    │                 │
│       │                  ├──▶│ Message  │───▶│                 │
│       │                  │   └──────────┘    │                 │
│       │                  │                    │                 │
│       │                  │   ┌──────────┐    │                 │
│       └──▶  (async) ────▶│──▶│ Message  │────│──▶ Process      │
│                          │   └──────────┘    │                 │
│                          │                    │                 │
│   Non-blocking           │                    │                 │
│   Reliable delivery       │                    │                 │
└─────────────────────────────────────────────────────────────────┘

Table of Contents

1. Introduction

  • Introduction - Core concepts, benefits, and types of message queues

2. Azure Queue Storage

3. Best Practices

4. Multiple Queues

5. Azure Service Bus

Quick Comparison

ServiceTypeMax MessageBest For
Azure Queue StoragePoint-to-Point64 KBSimple, cost-effective
Azure Service BusPub/Sub256 KBEnterprise features
RabbitMQHybrid64 MBCustom deployment
KafkaLog-basedUnlimitedHigh throughput

Getting Started

Choose the Right Service

// Simple point-to-point - Use Azure Queue Storage
var queueClient = new QueueClient(connectionString, "orders-queue");
await queueClient.SendMessageAsync(message);

// Pub/Sub needed - Use Azure Service Bus
var topicClient = new TopicClient(connectionString, "orders-topic");
await topicClient.SendMessageAsync(message);

Common Use Cases

Use CaseRecommended Service
Order ProcessingAzure Queue
Background JobsAzure Queue
Email NotificationsService Bus Topics
Event DistributionService Bus Topics
MicroservicesService Bus

Key Concepts

1. Producer

Component tạo và gửi messages vào queue.

// Fire and forget - non-blocking
await _queueClient.SendMessageAsync(new QueueMessage
{
    Body = BinaryData.FromObjectAsJson(order)
});

2. Queue

Buffer lưu trữ messages cho đến khi được xử lý.

3. Consumer

Component nhận và xử lý messages từ queue.

var messages = await _queueClient.ReceiveMessagesAsync(maxMessages: 10);
foreach (var message in messages.Value)
{
    await ProcessMessageAsync(message);
    await _queueClient.DeleteMessageAsync(message.MessageId, message.PopReceipt);
}

Next Steps

References