日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】Azure Messaging-ServiceBus Messaging消息队列技术系列2-编程SDK入门

發(fā)布時間:2023/12/10 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】Azure Messaging-ServiceBus Messaging消息队列技术系列2-编程SDK入门 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

各位,上一篇基本概念和架構中,我們介紹了Window Azure ServiceBus的消息隊列技術的概覽。接下來,我們進入編程模式和詳細功能介紹模式,一點一點把ServiceBus技術研究出來。

本章我們主要介紹ServiceBus的編程SDK編程入門。

首先,微軟提供了兩個主要的Nuget Packages:

Microsoft Azure Service Bus 3.4.0

主要的NameSpace有以下幾個:

1. Microsoft.ServiceBus,這個下面有兩個主要的類:TokenProvider(用于創(chuàng)建Azure ServiceBus連接Token)NamespaceManager(管理ServiceBus的命名空間)。

2. Microsoft.ServiceBus.Messaging,這個命名空間下面主要提供了:MessageSession、BrokeredMessage、QueueClient、TopicClient、TopicDescription、QueueDescription、SubscriptionClient、SubscriptionDescription等核心類。

在正式編碼之前,需要我們在Windows Azure的Portal上建立ServiceBus的NameSpace:

?

我們新建一個命名空間:servicebustest,選擇的類型是:消息

新建完成后處于活動(可用)的狀態(tài):

接下來,我們要獲取兩個重要的配置:連接串和主秘鑰

請將連接字符串拷貝下來,備用。

請將主秘鑰拷貝下來,備用。

啟動我們的ServiceBus的連接編碼,首先需要在應用程序配置文件中增加ServiceBus的連接信息:

<appSettings><!-- Service Bus specific app setings for messaging connections --><add key="Microsoft.ServiceBus.ConnectionString" value="Endpoint=sb://servicebustest.servicebus.chinacloudapi.cn/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=主秘鑰"/></appSettings>

后續(xù),所有的ServiceBus的連接操作,都會讀取這個配置節(jié)。我們通過case by case的方式,show 給大家:

首先:ServiceBus的命名空間管理器:Microsoft.ServiceBus.NamespaceManager

這里,我們主要用以下兩個方法來實例化:

public static NamespaceManager Create(); 例如:

var namespaceClient = NamespaceManager.Create();

通過NamespaceManager這個類,我們可以創(chuàng)建、刪除、獲取、重命名、更新、判斷是否存在:隊列、主題、訂閱、規(guī)則等

1. 消息隊列的創(chuàng)建、是否存在判斷、刪除操作

private void CreateQueue(string queueName, bool isRequiresSession = true){var nm = NamespaceManager.Create();if (nm.QueueExists(queueName)){nm.DeleteQueue(queueName);}var queue = new QueueDescription(queueName) { RequiresSession = isRequiresSession };nm.CreateQueue(queue);nm.DeleteQueue(queueName);}

2. 創(chuàng)建QueueClient,用于發(fā)送、接收消息

/// <summary>/// 創(chuàng)建隊列客戶端/// </summary>/// <returns>隊列客戶端</returns>public QueueClient CreateQueueClient(string queueName, ReceiveMode mode = ReceiveMode.ReceiveAndDelete){var namespaceClient = NamespaceManager.Create();return QueueClient.Create(queueName,mode);}

3. 主題的創(chuàng)建、刪除、是否存在判斷

private void CreateTopic(string topicName){var nm = NamespaceManager.Create();if (nm.TopicExists(topicName)){nm.DeleteTopic(topicName);}var topic = new TopicDescription(topicName);nm.CreateTopic(topic);nm.DeleteTopic(topicName);}

4. 創(chuàng)建TopicClient,用于主題的發(fā)送和訂閱接收消息

/// <summary>/// 創(chuàng)建主題客戶端/// </summary>/// <returns>主題客戶端</returns>public TopicClient GetTopicClient(string topicName){var namespaceClient = NamespaceManager.Create(); return TopicClient.Create(topicName);}

5. 創(chuàng)建消息BrokeredMessage,設置消息的屬性

/// <summary>/// 構造消息/// </summary>/// <param name="serializableObject">可序列化的對象</param>/// <returns>消息</returns>public static BrokeredMessage Create(Object serializableObject){ var serializer = new DataContractSerializer(serializableObject.GetType(),new DataContractSerializerSettings(){ IgnoreExtensionDataObject = true, PreserveObjectReferences = false});var message = new BrokeredMessage(serializableObject); message.Properties.Add("Type", serializableObject.GetType().ToString());return message;}

6.發(fā)送消息

/// <summary>/// 發(fā)送多條消息/// </summary>/// <param name="receivePayBills">收發(fā)貨訂單集合</param>public void Send(List<ReceivePayBill> receivePayBills){var queueClient = GetQueueClient(queueName);foreach (var receivePayBill in receivePayBills){var message = this.Create(receivePayBill);queueClient.Send(message);}queueClient.Close();}

7. 接收消息

/// <summary>/// 接收消息/// </summary>/// <returns>收付款訂單</returns>public List<ReceivePayBill> Receive(){var bills = new List<ReceivePayBill>(2);var queueClient = GetReceiveQueueClient(queueName, ReceiveMode.ReceiveAndDelete);BrokeredMessage message;while ((message = queueClient.Receive()) != null){bills.Add(message.GetBody<ReceivePayBill>());}return bills;}


還有很多其他的示例代碼。本文只是一個簡單的入門級教程,接下來我們將按MQ場景逐個展示ServiceBus Messaging的特性。

?

總結

以上是生活随笔為你收集整理的【转】Azure Messaging-ServiceBus Messaging消息队列技术系列2-编程SDK入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。