《Windows Azure Platform 系列文章目錄》
Service Bus 隊列(Queue)
Service Bus的Queue非常適合分布式應用。當使用Service Bus Queue的時候,分布式應用的組件不直接進行通信。
- 前端應用(發送方)創建一個Azure Service Bus Queue,插入需要處理的消息主體,然后繼續處理前端業務邏輯
- 后端消息處理(接收方)從Service Bus Queue中取出消息,並進行處理
- 發送方不需要等待接收方的答復,以便在前端處理和發送更多的消息
- Azure Service Bus Queue是First In First Out的,最先添加的消息主體,最先被處理。並且Service Bus Queue是會被多個接收方處理的,類似於競爭模式。但是同一時刻,一條消息主體只會被一個接收方處理,保證不會被多個接收方重復處理。
這就好比是筆者進餐館吃飯,服務員(代表筆者作為發送方)幫助筆者點菜,廚師(代表接收方)在廚房燒菜。假設這家餐館有ABC三個廚師,筆者點的菜就會被ABC三個廚師進行競爭處理,最先點的菜最先被處理(FIFO),且同一個菜只會由一個廚師制作,不會被兩個或者多個廚師同時制作。
Service Bus Queue 架構圖:
Service Bus Queue是一種通用的技術,可以用於各種各樣的情景:
- 在一個多層(Multi-Tier) Azure應用程序的Web Role和Service Bus Worker Role之前的通信
- Azure公網應用程序和企業內網應用程序互相通信的混合雲的解決方案
- 企業內網中不同組織或者部門的分布式應用程序之前的互相通信
使用Service Bus Queue可以讓你更好的擴展你的應用程序,並使架構更靈活。
接下來,筆者將介紹使用Azure Management Portal和Visual Studio 2013來創建和使用Azure Service Bus Queue。
本次Demo需要准備的前提條件:
- Windows Azure Global 賬號 (www.windowsazure.com)
- Visual Studio 2013
- Windows Azure SDK (筆者使用的是.NET SDK For VS2013)
1.首先我們需要登陸Azure Management Portal (http://manage.windowsazure.com)
2.點擊New -> App Service -> Service Bus ->Queue -> Custom Create。設置Service Bus的名稱和命名空間。如下圖:
然后配置Azure Service Bus,如下圖:
上圖中,可以按照需要設置Azure Service Bus Queue的Max Size等信息,筆者暫時使用默認設置。
3.創建完畢后,我們可以通過顯示欄的Connection Information來查看Service Bus的訪問密鑰,如下圖:
密鑰顯示如下:
以上完成了Service Bus NameSpace的設置。
4.然后我們以管理員身份打開VS2013。點擊工具欄的View -> Server Explorer。
在Server Explorer中,展開Windows Azure -> Service Bus,然后右鍵,點擊Add New Connection
在下圖中,勾選Use connection string,然后復制我們在步驟三中的訪問密鑰連接字符串:
5.設置完畢后,我們展開Service Bus -> leizhangservicebus-ns -> Queues,然后點擊Queue,右鍵,Create New Queue。如下圖:
在彈出的窗口中,設置Name為LeiZhangServiceBusQueue。
然后展開Queues的內容,可以查看到我們創建成功的Azure Service Bus Queue。
階段性總結:
步驟1-3,實現了創建Azure Service Bus Namespace的工作
步驟4-5,實現了創建Azure Service Bus Queue的工作
接下來,我們要測試通過Visual Studio 2013,向Service Bus Queue,發送和接受消息。
1.我們點擊上圖中創建成功的Service Bus Queue,點擊右鍵Send a test message,進行發送消息的測試,如下圖:
2.會彈出窗口,證明發送測試消息成功。如下圖:
3.重復步驟1的Send a test message三次。
4.回到Azure Management Portal,點擊leizhangservicebus-ns,可以查看到Queue Length為3,是因為在步驟3中,我們Send a test message執行了三次。如下圖:
5.接下來,我們執行接收消息的步驟。我們右鍵點擊"Receive Message"
6.點擊Receive Message之后,會顯示接受消息的結果。
可以看到,下周中Id為1,即第一條消息。說明了Service Bus Queue是First-In-First-Out的,且Label的時間4:32:36 PM和步驟2的時間一致,也說明了是接受到了第一條消息。如下圖:
7.重復步驟5的Receive Message,直至將所有的Azure Service Bus Message取出。
8.然后我們回到Azure Management Portal,可以看到Queue Length又變成0了,因為筆者通過VS2013將Service Bus Queue的消息都Receive了。如下圖: