Azure Messaging-ServiceBus Messaging消息隊列技術系列2-編程SDK入門


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

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

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

Microsoft Azure Service Bus 3.4.0

主要的NameSpace有以下幾個:

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

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

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

 

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

新建完成后處於活動(可用)的狀態:

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

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

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

啟動我們的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>

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

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

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

public static NamespaceManager Create(); 例如:

var namespaceClient = NamespaceManager.Create();

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

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

  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. 創建QueueClient,用於發送、接收消息

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

3. 主題的創建、刪除、是否存在判斷

 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. 創建TopicClient,用於主題的發送和訂閱接收消息

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

5. 創建消息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.發送消息

        /// <summary>
        /// 發送多條消息
        /// </summary>
        /// <param name="receivePayBills">收發貨訂單集合</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的特性。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM