Hướng dẫn sử dụng ServiceBus – Topic

Mô hình ServiceBus Topic

sb-topics-01

Ngược với mô hình ServiceBus-Queue: trong đó mỗi message được xử lý bởi một consumer, Topic – Subcription cung cấp cơ chế  hoạt động giao tiếp “một-nhiều”, theo dạng publish-subcribe. Mô hình publish-subcribe cho phép một topic có nhiều đăng ký (subcriptions) cùng topic đó. Khi một message được gửi đến Topic nào đó, message đó được khả dụng cho tất cả các đăng ký cùng topic đó.

Các bước thực hiện:

  • Đăng nhập Azure portal
  • Nhấp vào Service Bus
  • Tạo mới namespace
  • Thiết lập Access policies bằng cách click vào Connection Information > thực hiện theo hướng dẫn.
  • Viết mã cho dự án (project)
    • Tạo Project (Windows Application or Console Application)
    • Sử dụng NuGet Package để install Microsoft Azure Service Bus và Microsoft.WindowsAzure.ConfigurationManager
    • Thiết lập cấu hình ConnectionString cho ServiceBus bằng cách thêm thiết lập sau vào web.config hoặc app.config

<appSettings>
<add key=”Microsoft.ServiceBus.ConnectionString”
value=”Endpoint=sb://khanhservicebus01.servicebus.windows.net/;SharedAccessKey Name=RootManageSharedAccessKey;SharedAccessKey=your_key_here“/>
</appSettings>

Mã nguồn để gửi message lên topic

// Create the topic if it does not exist already.
string connectionString = CloudConfigurationManager.GetSetting(“Microsoft.ServiceBus.ConnectionString”);

var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);
//Create a topic
if (!namespaceManager.TopicExists(“Topic1”))
{
namespaceManager.CreateTopic(“Topic1”);
}

//Create a subscription with the default (MatchAll) filter
if (!namespaceManager.SubscriptionExists(“Topic1”, “AllMessages”))
{
namespaceManager.CreateSubscription(“Topic1”, “AllMessages”);
}

//Send messages to topic
TopicClient Client = TopicClient.CreateFromConnectionString(connectionString, “Topic1”);

for (int i = 0; i < 5; i++)
{
// Create message, passing a string message for the body.
BrokeredMessage message = new BrokeredMessage(“Test message ” + i);

// Set additional custom app-specific property.
message.Properties[“MessageNumber”] = i;

// Send message to the topic.
Client.Send(message);
}
MessageBox.Show(“sent”);
}

Mã nguồn để nhận message từ topic

string connectionString = CloudConfigurationManager.GetSetting(“Microsoft.ServiceBus.ConnectionString”);

SubscriptionClient Client = SubscriptionClient.CreateFromConnectionString(connectionString, “Topic1”, “AllMessages”);

// Configure the callback options.
OnMessageOptions options = new OnMessageOptions();
options.AutoComplete = false;
options.AutoRenewTimeout = TimeSpan.FromMinutes(1);

Client.OnMessage((message) =>
{
try
{
// Process message from subscription.
//Console.WriteLine(“\n**High Messages**”);
Console.WriteLine(“Body: ” + message.GetBody<string>());
Console.WriteLine(“MessageID: ” + message.MessageId);
// Console.WriteLine(“Message Number: ” + message.Properties[“MessageNumber”]);

// Remove message from subscription.
message.Complete();
}
catch (Exception ex)
{
// Indicates a problem, unlock message in subscription.
message.Abandon();
MessageBox.Show(ex.Message);
}
}, options);

 

 

Hướng dẫn sử dụng ServiceBus – Queue

  1. Đăng nhập vào Azure classic portal.
  2. Nhấp vào Service Bus
  3. Tạo mới namespace
  4. Tạo mới queue, sau khi tạo queue, chọn queue vừa tạo và nhấp vào Connection Information. 
  5. Thiết lập các quyền truy cập queue với các role như sau: (xem thêm cách hướng dẫn tạo queue ở trang sau How to create queue
  6. q
  7. Sau khi tạo xong các Access policies, bắt tay vào viết mã cho dự án như sau
  • Tạo mới dự án Windows Application với form và các điều khiển như giao diện

form

  • Sử dụng NuGet package để install thư viện Microsoft Azure Service Bus

nuget-package

  • Import thư viện using Microsoft.ServiceBus.Messaging;
  • Viết mã cho nút Send

var connectionString = “Endpoint=sb://khanhservicebus01.servicebus.windows.net/;SharedAccessKeyName=pol1;SharedAccessKey=YOURKEYHERE”;
var queueName = “queue1”;

var client = QueueClient.CreateFromConnectionString(connectionString, queueName);
var message = new BrokeredMessage(textBox1.Text);

client.Send(message);
MessageBox.Show(“sent”);

  • Viết mã cho nút Read

var connectionString = “Endpoint=sb://khanhservicebus01.servicebus.windows.net/;SharedAccessKeyName=pol2;SharedAccessKey=YOUR KEY HERE”;

var queueName = “queue1”;

var client = QueueClient.CreateFromConnectionString(connectionString, queueName);

client.OnMessage(message =>
{
textBox2.AppendText(“Message body: ” + message.GetBody<String>());
//MessageBox.Show(message.GetBody<string>());
});