Azure service bus Topic基本用法
我们在升级一个POS系统的时候,决定使用微软公有云计算平台下的Azure ServiceBus 进行POS客户端与服务器的交互。
本文主要时作者在学习使用 Azure SDK for .NET 操作由世纪互联运营的 中国区Azure 上的 Service Bus。
目录
一、安装AzureServiceBus程序集
二、在Portal创建命名空间
三、通过代码创建Topic
四、通过代码创建订阅
五、创建并发送消息
六、消费消息
1.通过nuget安装程序集
using Microsoft.ServiceBus;
using Microsoft.ServiceBus.Messaging;

using Microsoft.Azure;

2. 在Portal创建 service bus 命名空间:

只有标准级别可以使用主题(Topic),因此创建命名空间时,请选择标准;
也可以创建后,在缩放选项卡里调整为标准。

3.创建主题,可以通过portal创建,也可以通过代码创建:

通过代码创建主题:
// Create the topic if it does not exist already.
string connectionString =
CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString"); var namespaceManager =
NamespaceManager.CreateFromConnectionString(connectionString); if (!namespaceManager.TopicExists("TestTopic"))
{ //默认的createtopic方法
namespaceManager.CreateTopic("TestTopic"); // 通过TopicDescription构建一个重载
//TopicDescription td = new TopicDescription("TestTopicCustomer");
//td.MaxSizeInMegabytes = 5120;
//td.DefaultMessageTimeToLive = new TimeSpan(0, 1, 0);
//if (!namespaceManager.TopicExists("TestTopicCustomer"))
//{
// namespaceManager.CreateTopic(td);
//} }
4.创建订阅:
下面的代码演示创建了三个订阅,其中Product和Customer订阅增加了一个SqlFilter,即如果发送消息时,
message.Properties["Entity"] = "Product",则消息会由Product订阅处理;
message.Properties["Entity"] = "Customer",则消息会由Customer订阅处理;
string connectionString =
CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString"); var namespaceManager =
NamespaceManager.CreateFromConnectionString(connectionString); if (!namespaceManager.SubscriptionExists("TestTopic", "AllMessages"))
{
namespaceManager.CreateSubscription("TestTopic", "AllMessages");
} Console.WriteLine("AllMessages done"); // Create a "ProductMessagesFilter" filtered subscription.
SqlFilter ProductMessagesFilter =
new SqlFilter("Entity='Product'"); namespaceManager.CreateSubscription("TestTopic",
"Product",
ProductMessagesFilter); Console.WriteLine("Product done"); // Create a "CustomerMessagesFilter" filtered subscription.
SqlFilter CustomerMessagesFilter =
new SqlFilter("Entity='Customer'"); namespaceManager.CreateSubscription("TestTopic",
"Customer",
CustomerMessagesFilter); Console.WriteLine("Customers done");
5.创建并发送普通消息:
下面创建了5个product和3个customer并发送了消息,
BrokeredMessage message = new BrokeredMessage(product);
BrokeredMessage message = new BrokeredMessage(customer);
Product有如下设置:message.Properties["Entity"] = "Product";
Customer有如下设置:message.Properties["Entity"] = "Customer";
则 product 订阅会有5条消息,customer订阅会有3条消息,另外,Allmessages没有任何sqlfilter,则该订阅会有5+3=8条消息。
string connectionString =
CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString"); TopicClient Client =
TopicClient.CreateFromConnectionString(connectionString, "TestTopic"); // Client.Send(new BrokeredMessage()); //Add 5 Products
var product = new Model.Product(); for (int i = ; i < ; i++)
{ product.ProductID ="ProductID"+ i.ToString(); // Create message, passing a Product for the body.
BrokeredMessage message = new BrokeredMessage(product); // Set additional custom app-specific property.
message.Properties["Entity"] = "Product"; //ScheduledMessage
//message.ScheduledEnqueueTimeUtc = DateTime.Now.AddMinutes(1); // Send message to the topic.
Client.Send(message);
} //Add 3 Customers
var customer = new Model.Customer(); for (int i = ; i < ; i++)
{ customer.CustomerID = "CustomerID"+i.ToString(); // Create message, passing a Customer message for the body.
BrokeredMessage message = new BrokeredMessage(customer); // Set additional custom app-specific property.
message.Properties["Entity"] = "Customer"; // Send message to the topic.
Client.Send(message);
}
发送消息后的效果:

创建定时消息:
设置消息的如下属性,则消息在发送成功后延时1分钟后才会出现在上图中,也才可以被订阅消费。
message.ScheduledEnqueueTimeUtc = DateTime.Now.AddMinutes(1);
6.消费消息:
不同的订阅可以取不同订阅里的消息进行处理,处理完成后,标记message.Complete()即可从订阅里清除消息。
string connectionString =
CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString"); //SubscriptionClient Client =
// SubscriptionClient.CreateFromConnectionString
// (connectionString, "TestTopic", "Customer"); //SubscriptionClient Client =
// SubscriptionClient.CreateFromConnectionString
// (connectionString, "TestTopic", "Product"); SubscriptionClient Client =
SubscriptionClient.CreateFromConnectionString
(connectionString, "TestTopic", "AllMessages"); // Configure the callback options.
OnMessageOptions options = new OnMessageOptions();
options.AutoComplete = false;
options.AutoRenewTimeout = TimeSpan.FromMinutes(); Client.OnMessage((message) =>
{
try
{
// Process message from subscription.
Console.WriteLine("Messages"); Console.WriteLine("MessageID: " + message.MessageId);
Console.WriteLine("Message EntityType=: " +
message.Properties["Entity"]); if(message.Properties["Entity"].ToString()=="Customer")
{
Console.WriteLine("CustomerID=" + message.GetBody<Customer>().CustomerID.ToString());
}
if (message.Properties["Entity"].ToString() == "Product")
{
Console.WriteLine("ProductID=" + message.GetBody<Product>().ProductID.ToString());
} // Remove message from subscription.
message.Complete();
}
catch (Exception)
{
// Indicates a problem, unlock message in subscription.
message.Abandon();
}
}, options); Console.ReadLine();
特别注意:消费掉Product或Customer里的消息后,AllMessage里的消息不受影响。
Azure service bus Topic基本用法的更多相关文章
- Windows Azure Service Bus (5) 主题(Topic) 使用VS2013开发Service Bus Topic
<Windows Azure Platform 系列文章目录> 项目文件,请在这里下载 在笔者之前的文章中Windows Azure Service Bus (1) 基础 介绍了Servi ...
- Windows Azure Service Bus Topics实现系统松散耦合
前言 Windows Azure中的服务总线(Service Bus)提供了多种功能, 包括队列(Queue), 主题(Topic),中继(Relay),和通知中心(Notification Hub) ...
- Windows Azure Service Bus (4) Service Bus Queue和Storage Queue的区别
<Windows Azure Platform 系列文章目录> 熟悉笔者文章的读者都了解,Azure提供两种不同方式的Queue消息队列: 1.Azure Storage Queue 具体 ...
- 阿里云ONS而微软Azure Service Bus体系结构和功能比较
阿里云ONS而微软Azure Service bus体系结构和功能比较 版权所有所有,转载请注明出处http://blog.csdn.net/yangzhenping.谢谢! 阿里云的开放消息服务: ...
- 如何在ASP.NET Core中使用Azure Service Bus Queue
原文:USING AZURE SERVICE BUS QUEUES WITH ASP.NET CORE SERVICES 作者:damienbod 译文:如何在ASP.NET Core中使用Azure ...
- 使用Service Bus Topic 实现简单的聊天室
创建Service Bus能够參照: https://azure.microsoft.com/en-gb/documentation/articles/service-bus-dotnet-how-t ...
- 【Azure 服务总线】详解Azure Service Bus SDK中接收消息时设置的maxConcurrentCalls,prefetchCount参数
(Azure Service Bus服务总线的两大类消息处理方式: 队列Queue和主题Topic) 问题描述 使用Service Bus作为企业消息代理,当有大量的数据堆积再Queue或Topic中 ...
- Azure Service Bus 中的身份验证方式 Shared Access Signature
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- Windows Azure Service Bus Notification Hub推送通知
前言 随着Windows Azure 在中国的正式落地,相信越来越多的人会体验到Windows Azure带来的强大和便利.在上一篇文章中, 我们介绍了如何利用Windows Azure中的Servi ...
随机推荐
- 持续集成工具hudson【转载】
第一节 我的理解 项目中使用了hudson,那么hudson是处在怎样的一个地位呢? 首先就我自己的认知,项目中hudson的作用有一下几点: 1.获取svn服务器上的最新代码: 2.把最新代码编译打 ...
- Package 'sun-java6-jdk' has no installation candidate 解决方式【转】
本文转载自:http://www.cnblogs.com/changefuture/archive/2012/06/19/2554876.html 解决方式: sudo add-apt-reposit ...
- Codeforces Round #363 (Div. 2) D. Fix a Tree —— 并查集
题目链接:http://codeforces.com/contest/699/problem/D D. Fix a Tree time limit per test 2 seconds memory ...
- H264 各种profile
关键字:H264 ,base profile, main profile, extend profile, high profile. 提到High Profile H.264解码许多人并不了解,那么 ...
- Android记录程序崩溃Log写入文件
将导致程序崩溃的堆栈调用Log写入文件,便于收集bug.在调试安卓程序,由于某些原因调试时手机不能连接PC端,无法通过IDE查看程序崩溃的Log,希望log能够写入文件中,对于已经发布的App可以通过 ...
- the art of seo(chapter five)
Keyword Research ***The Theory Behind Keyword Research***1.When users go to search engines and type ...
- ML assignment #1
ML assignment #1 Problem: implement classification model to train the Iris dataset and make predicti ...
- java第五天之---方法与数组
案例一:从键盘输入两个数据,比较大小 import java.util.Scanner;class FunctionTest { public static void main(String[] ar ...
- VS中文档大纲视图的作用
一.在vs的菜单栏中点击视图==========>其他窗口===========>文档大纲 二.文档大纲的作用是可以查看当前Form窗体的结构,如下图 三.若果感觉控件的类型太长,可以在文 ...
- CSS3:CSS 听觉参考手册
ylbtech-CSS3:CSS 听觉参考手册 1.返回顶部 1. 听觉样式表 听觉样式表可把语音合成与音响效果相组合,使用户可以听到信息,而无需进行阅读. 听觉呈现可用于: 视觉能力低弱的人士 帮助 ...