C# Azure 消息隊列ServiceBus (服務總線隊列)


1. 前言

在閱讀本文之前,可以查看微軟官方的說明。

https://www.azure.cn/documentation/articles/service-bus-create-queues/

 

2. 介紹

1) service bus的隊列,若當前消息被成功處理后,則這個消息會從隊列中消失。

2) service bus是先進先出的隊列,當取隊列時,一直停留做等待,直到有消息進入。

3) Windows Azure Service Bus 提供安全且廣泛可用的托管基礎結構,以實現廣泛通信、大范圍事件分布、命名和服務發布。Service Bus 為 Windows Communication Foundation (WCF) 和其他服務終結點(包括 REST 終結點)提供連接選項,沒有這些連接選項將很難或不可能訪問這些終結點。可以將終結點置於網絡地址轉換 (NAT) 邊界的后面並/或綁定到經常更改的、動態分配的 IP 地址。

4)Service Bus 提供“中繼”和“中轉”消息傳遞功能。在中繼消息傳遞模式下,中繼服務支持直接單向消息傳遞、請求/響應消息傳遞和對等消息傳遞。中轉消息傳遞提供了持久異步消息傳遞組件(如隊列主題訂閱),具有支持發布-訂閱和臨時分離的功能:發送者和接收者不必同時處於聯機狀態;該消息傳遞基礎結構能夠可靠地存儲消息,直到接收方准備好接收消息。

 

3. 開始創建

1)登錄到Azure https://manage.windowsazure.cn/

2)打開服務總線

image

3)新建消息隊列

在左下角—>新建 —> 服務總線—>隊列—>自定義創建

image

我們輸入隊列名稱與命名空間名稱如下:隊列名稱:myqueue;命名空間名稱:testnamespace

image

點擊下一步,如下。用默認的值,你也可以用自己自定義的值

image

這時候,我們等待創建,命名空間與隊列都創建成功,如下:

image

 

4)設置隊列

我們依次進入 命名空間—>隊列—>myqueue—>配置,填寫名稱與權限。用來配置隊列連接屬性與連接字符串

image

我們填寫名稱alun,有管理、發送、偵聽的權限。

image

 

5)查看連接信息

打開命名空間testnamespace—>隊列,選中myqueue,然后查看連接信息

image

可以看到連接字符串

image

到此,創建隊列結束

 

4. 代碼開始

1)首先,創建一個項目,這里我們創建一個控制台項目 ConsoleApplicationServiceBus

image

 

2)導入相應的包

Install-Package WindowsAzure.ServiceBus

image

 

3)連接servicebus

如果代碼中不對 ConnectivityMode 做預先設置,service bus 客戶端( web 應用)默認使用了 AutoDetect 模式 連接 service bus 服務。 AutoDetect 會優先使用 TCP 連接模式。由於 TCP 連接模式也是加密的,所以客戶端需要首先驗證 service bus 服務器證書 CN = servicebus.chinacloudapi.cn 的有效性,證書鏈信息在 SSL 協議的 server hello 消息中返回。

如果證書鏈中的某些中間證書沒有安裝在 web 應用實例上,web 應用需要發起額外的請求到 CA 服務器上下載中間證書並安裝。

          //最好設置連接模式為Https,默認是Tcp。如果是Tcp的話,放到雲端WEB應用上會報錯
            ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.Https;
            //開始連接
            QueueClient Client = QueueClient.CreateFromConnectionString(connStr, queueName);

取得消息

        public MessageData GetMessage()
        {
            var vMsg = Client.Receive();
            if (vMsg == null)
            {
                return null;
            }
            messageData = vMsg.GetBody<MessageData>();
            vMsg.Complete();

            return messageData;
        }

添加消息

        public void AddMessage(MessageData msg)
        {
            var vmsg = new BrokeredMessage(msg);
            Client.Send(vmsg);
        }
    }

 

下面是我們自定義的 MessageData類

   [DataContract]
    public class MessageData
    {
        [DataMember]
        public string Content { get; set; }

        [DataMember]
        public string id { get; set; }
    }


免責聲明!

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



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