我们在升级一个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基本用法的更多相关文章

  1. Windows Azure Service Bus (5) 主题(Topic) 使用VS2013开发Service Bus Topic

    <Windows Azure Platform 系列文章目录> 项目文件,请在这里下载 在笔者之前的文章中Windows Azure Service Bus (1) 基础 介绍了Servi ...

  2. Windows Azure Service Bus Topics实现系统松散耦合

    前言 Windows Azure中的服务总线(Service Bus)提供了多种功能, 包括队列(Queue), 主题(Topic),中继(Relay),和通知中心(Notification Hub) ...

  3. Windows Azure Service Bus (4) Service Bus Queue和Storage Queue的区别

    <Windows Azure Platform 系列文章目录> 熟悉笔者文章的读者都了解,Azure提供两种不同方式的Queue消息队列: 1.Azure Storage Queue 具体 ...

  4. 阿里云ONS而微软Azure Service Bus体系结构和功能比较

    阿里云ONS而微软Azure Service bus体系结构和功能比较 版权所有所有,转载请注明出处http://blog.csdn.net/yangzhenping.谢谢! 阿里云的开放消息服务: ...

  5. 如何在ASP.NET Core中使用Azure Service Bus Queue

    原文:USING AZURE SERVICE BUS QUEUES WITH ASP.NET CORE SERVICES 作者:damienbod 译文:如何在ASP.NET Core中使用Azure ...

  6. 使用Service Bus Topic 实现简单的聊天室

    创建Service Bus能够參照: https://azure.microsoft.com/en-gb/documentation/articles/service-bus-dotnet-how-t ...

  7. 【Azure 服务总线】详解Azure Service Bus SDK中接收消息时设置的maxConcurrentCalls,prefetchCount参数

    (Azure Service Bus服务总线的两大类消息处理方式: 队列Queue和主题Topic) 问题描述 使用Service Bus作为企业消息代理,当有大量的数据堆积再Queue或Topic中 ...

  8. Azure Service Bus 中的身份验证方式 Shared Access Signature

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  9. Windows Azure Service Bus Notification Hub推送通知

    前言 随着Windows Azure 在中国的正式落地,相信越来越多的人会体验到Windows Azure带来的强大和便利.在上一篇文章中, 我们介绍了如何利用Windows Azure中的Servi ...

随机推荐

  1. Codeforces Round #198 (Div. 2) E. Iahub and Permutations —— 容斥原理

    题目链接:http://codeforces.com/contest/340/problem/E E. Iahub and Permutations time limit per test 1 sec ...

  2. python学习笔记:第二天(基本数据类型)

    Python3 基本数据类型 1.标准数据类型 Python3中有六个标准的数据类型:Number(数字).String(字符串).List(列表).Tuple(元组).Sets(集合).Dictio ...

  3. java运行Linux命令

    <%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UT ...

  4. ZIP伪加密(deprecated)

    ZIP伪加密 经过伪加密的apk,改成zip格式打开会发现里面的文件都经过了加密. APK实际上是Zip压缩文件,但是Android系统在解析APK文件时,和传统的解压压缩软件在解析Zip文件时存在差 ...

  5. OpenResty创造者

    OpenResty 是一个开源的 Web 平台,用于开发高性能和高动态的 Web 网关或者 Web 应用.OpenResty 最早是为了支持全网搜索引擎周边的相关搜索的 API 接口,后来我们基于 N ...

  6. Storm 01之 Storm基本概念及第一个demo

    2.1 Storm基本概念 在运行一个Storm任务之前,需要了解一些概念: Topologies :[tə'pɑ:lədʒɪ]拓扑结构 Streams Spouts:[spaʊt]喷出; 喷射; 滔 ...

  7. JavaScript-Tool:jquery.md5.js

    ylbtech-JavaScript-Tool:jquery.md5.js 1.返回顶部 1. 引入js后 使用方法:document.write($.md5('1234')); 加密结果:81dc9 ...

  8. 三 vue学习三 从读懂一个Vue项目开始

    源码地址:     https://github.com/liufeiSAP/vue2-manage 我们的目录结构: 目录/文件 说明 build 项目构建(webpack)相关代码. config ...

  9. css 属性相关

    css属性相关 宽和高 width属性可以为元素设置宽度, height属性可以为元素设置好高度 块级标签才能设置宽度,内联标签的宽度由内容来决定. 字体属性 文字字体 font-family 可以把 ...

  10. Unresolved function or method require()

    1. 这是在JavaScript配置中没有node.js,去设置中配置就行了,方法如下: setting -> Languages&Frameworks -> Javascript ...