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
- Azure Queue Storage - Basic implementation, sending/receiving messages
3. Best Practices
- Queue Best Practices - Error handling, retry patterns, dead letter queues, idempotency
4. Multiple Queues
- Multiple Queues - Managing multiple queue clients, factory pattern
5. Azure Service Bus
- Service Bus Topics - Pub/Sub patterns, filters, subscriptions
Quick Comparison
| Service | Type | Max Message | Best For |
|---|---|---|---|
| Azure Queue Storage | Point-to-Point | 64 KB | Simple, cost-effective |
| Azure Service Bus | Pub/Sub | 256 KB | Enterprise features |
| RabbitMQ | Hybrid | 64 MB | Custom deployment |
| Kafka | Log-based | Unlimited | High 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 Case | Recommended Service |
|---|---|
| Order Processing | Azure Queue |
| Background Jobs | Azure Queue |
| Email Notifications | Service Bus Topics |
| Event Distribution | Service Bus Topics |
| Microservices | Service 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
- Start with Introduction to understand the basics
- Move to Azure Queue Storage for implementation
- Learn Best Practices for production systems
- Explore Service Bus Topics for Pub/Sub