Giới thiệu
Azure Service Bus là một dịch vụ được cung cấp bởi Microsoft Azure để hỗ trợ việc trao đổi tin nhắn giữa các ứng dụng khác nhau trên nền tảng điện toán đám mây. Đây là một trong những service khá hay và được sử dụng phổ biến trong những hệ thống phức tạp.
Các tính năng của Azure Service Bus bao gồm việc hỗ trợ nhiều giao thức trao đổi tin nhắn như AMQP, HTTP và HTTPS, hỗ trợ đa nền tảng và tích hợp với nhiều ngôn ngữ lập trình khác nhau.
Để sử dụng Azure Service Bus, bạn cần đăng ký tài khoản Azure và tạo một Service Bus Namespace. Sau đó, bạn có thể tạo các Queue hoặc Topic để truyền tải các tin nhắn giữa các ứng dụng. Ngoài ra, Azure Service Bus còn cung cấp nhiều tính năng và công cụ phân tích để giúp bạn quản lý và giám sát hệ thống của mình.
Với Azure Service Bus, bạn có thể xây dựng được các ứng dụng đám mây hiệu quả và tự động hóa được các quy trình liên quan đến trao đổi tin nhắn giữa các ứng dụng khác nhau.
Namespace
Azure namespace là một khái niệm được sử dụng để định danh các tài nguyên trong Azure. Một namespace cung cấp một vùng chứa phạm vi cho các tài nguyên Service Bus trong ứng dụng của bạn. Để sử dụng các tài nguyên Service Bus, bạn cần tạo một namespace với một tên là duy nhất trên Azure
Topic
Topic giống như một hàng đợi, nhưng nó có một hoặc nhiều subscription độc lập liên kết với nó
Khi bạn gửi 1 message vào 1 topic, thì tất cả các subscription đều nhận được cùng 1 tin nhắn.
Tạo Azure Service Bus trong Azure Portal
Tạo topic
Sau khi tạo xong Topic, bạn vào Entities => Topics, nhấp chọn Topic vừa tạo
Nhấp vào +Subscription để tạo 1 subscription mớiGửi message từ Queue và Topic
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"AzureWebJobsServiceBus": "Endpoint=sb://<service-bus-name>.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=xyz..."
}
}
Cập nhật Function gởi message cho queue như sau:
public static class SendMessageFunction
{
[FunctionName("SendMessageFunction")]
[return: ServiceBus("az-queue", EntityType = ServiceBusEntityType.Queue, Connection = "AzureWebJobsServiceBus")]
public static async Task<string> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("SendMessage function requested");
var requestBody = await new StreamReader(req.Body).ReadToEndAsync();
log.LogInformation($"SendMessage processed.");
return requestBody;
}
}
Cú pháp:
ServiceBus(QueueOrTopicName, EntityType, Connection)
EntityType có kiểu dữ liệu là enum ServiceBusEntityType (Queue hoặc Topic) Tương tự, chúng ta có đoạn code gửi message tới topic như sau:
public static class SendMessageFunction
{
[FunctionName("SendMessageFunction")]
[return: ServiceBus("employeetopic", EntityType = ServiceBusEntityType.Topic, Connection = "AzureWebJobsServiceBus")]
public static async Task<string> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("SendMessage function requested");
var requestBody = await new StreamReader(req.Body).ReadToEndAsync();
log.LogInformation($"SendMessage processed.");
return requestBody;
}
}
Nhận message từ Azure Service Bus
Tạo Azure Function với trigger là ServiceBus Queue Trigger File local.settings.json{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"nhatkyhoctap_SERVICEBUS": "Endpoint=sb://<service-bus-name>.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abc"
}
}
Hàm chính có nội dung như sau:
public class ServiceBusQueueTriggerDemo
{
[FunctionName("ServiceBusQueueTriggerDemo")]
public void Run([ServiceBusTrigger("az-queue", Connection = "nhatkyhoctap_SERVICEBUS")]string myQueueItem, ILogger log)
{
log.LogInformation($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
}
}
Dưới đây là đoạn code bổ sung thêm messageId, deliveryCount với enqueuedTimeUtc
[FunctionName("ServiceBusQueueTriggerDemo")]
public void Run([ServiceBusTrigger("az-queue", Connection = "nhatkyhoctap_SERVICEBUS")]string myQueueItem, int deliveryCount,
DateTime enqueuedTimeUtc,
string messageId, ILogger log)
{
log.LogInformation($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
log.LogInformation($"EnqueuedTimeUtc={enqueuedTimeUtc}");
log.LogInformation($"DeliveryCount={deliveryCount}");
log.LogInformation($"MessageId={messageId}");
}
Còn với Topic trigger, bạn thử viết code xem.
Tham khảo
Khám phá azure service bus là gì với những tính năng mới nhất
How To Send And Read Messages From Azure Service Bus Queues Using Azure Functions
https://haleemakhan03.medium.com/azure-function-to-cosmos-db-message-pipeline-via-service-bus-c8e6d67154e3
Trả lờiXóa