Chuyển đến nội dung chính

Azure Service Bus: Giới thiệu về Azure Service Bus

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

Bạn vào Azure Portal -> Create a resource -> Create namespace (Service Bus).
Ở bước này, bạn nên chọn Pricing tier = Standard (bạn sẽ sử dụng được Topic)

Sau khi tạo Service Bus namespace, bạn vào Settings => Shared access policies để lấy key access vào Azure Service Bus

Tạo topic

Có 2 cách để bạn tạo topic và subscription. Một là bạn tạo trong Azure Portal. Hai là bạn tạo bằng code C#.
Trên trang Service Bus namespace, bạn nhấp Overview => +Topic để tạo 1 topic mới.


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ới

Gửi message từ Queue và Topic

Tạo Queue tên "az-queue" và topic tên "employeetopic"
Tạo Azure Function App mới và chọn HTTP Trigger (.NET 6)
Mở file local.settings.json, thêm key mới AzureWebJobsServiceBus với value PrimaryConnectionString trong ServiceBus
{
  "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) 
Connection: app setting name chứa Service Bus connection string
Kết quả:
Chương trình sẽ gửi message thành công tới Queue

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

Azure Service Bus trigger for Azure Functions

Nhận xét

  1. https://haleemakhan03.medium.com/azure-function-to-cosmos-db-message-pipeline-via-service-bus-c8e6d67154e3

    Trả lờiXóa

Đăng nhận xét

Bài đăng phổ biến từ blog này

[ASP.NET MVC] Authentication và Authorize

Một trong những vấn đề bảo mật cơ bản nhất là đảm bảo những người dùng hợp lệ truy cập vào hệ thống. ASP.NET đưa ra 2 khái niệm: Authentication và Authorize Authentication xác nhận bạn là ai. Ví dụ: Bạn có thể đăng nhập vào hệ thống bằng username và password hoặc bằng ssh. Authorization xác nhận những gì bạn có thể làm. Ví dụ: Bạn được phép truy cập vào website, đăng thông tin lên diễn đàn nhưng bạn không được phép truy cập vào trang mod và admin.

ASP.NET MVC: Cơ bản về Validation

Validation (chứng thực) là một tính năng quan trọng trong ASP.NET MVC và được phát triển trong một thời gian dài. Validation vắng mặt trong phiên bản đầu tiên của asp.net mvc và thật khó để tích hợp 1 framework validation của một bên thứ 3 vì không có khả năng mở rộng. ASP.NET MVC2 đã hỗ trợ framework validation do Microsoft phát triển, tên là Data Annotations. Và trong phiên bản 3, framework validation đã hỗ trợ tốt hơn việc xác thực phía máy khách, và đây là một xu hướng của việc phát triển ứng dụng web ngày nay.

Tổng hợp một số kiến thức lập trình về Amibroker

Giới thiệu về Amibroker Amibroker theo developer Tomasz Janeczko được xây dựng dựa trên ngôn ngữ C. Vì vậy bộ code Amibroker Formula Language sử dụng có syntax khá tương đồng với C, ví dụ như câu lệnh #include để import hay cách gói các object, hàm trong các block {} và kết thúc câu lệnh bằng dấu “;”. AFL trong Amibroker là ngôn ngữ xử lý mảng (an array processing language). Nó hoạt động dựa trên các mảng (các dòng/vector) số liệu, khá giống với cách hoạt động của spreadsheet trên excel.