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);

 

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s