概述:您可以在云中運行后臺進程。Kevin Hoffman 和 Nate Dudek 使用購物車示例演示如何構建應用程序引擎,以及如何使用Azure Sto工字電感器rage實現異步消息傳送和處理。
開發人員容易依賴其有形的、可感知的基礎結構,就像其是“安全毛毯”。他們知道如何使用、如何操作,如果出現問題,他們知道問題出在哪兒。而這通常會成為開發人員采用更新的技術(例如云計算)的障礙。
心存懷疑的開發人員提出的最大疑問之一是他們如何在云中繼續運行后臺進程,即他們的引擎如何繼續運行。本文旨在通過向您演示如何構建應用程序引擎以及使用 Windows Azure Storage 實現異步消息傳送和處理來為您揭開云中缺乏后臺處理的神秘面紗。
為了證明開發人員可以拋開其有形的基礎結構這條“安全毛毯”并將其應用程序引擎置于云中,我們將介紹如何實現電子商務應用程序的一個小型子集 Hollywood Hackers,您可以從中購買到 Hollywood 用于完全忽略物理法則和過時的常識的所有神奇技術。
我們將介紹的兩個主要方案如下:
將異步文本消息 (“toasts”) 發送給使用該應用程序的用戶,以通知他們發生的重要事件(如已提交他們的購物車)或在員工之間發送消息。此方案使用 Windows Azure Queue、Windows Azure Table 和 Windows Azure 工作者角色。
此方案使用 Windows Azure Queue 和 電感器英文Windows Azure 工作者角色將購物車提交給執行引擎。
使用隊列存儲進行內部應用程序消息傳送
在介紹具體的方案之前,我們需要先介紹一些有關 Windows Azure Queue 的基礎知識。云中的隊列與傳統的 .NET 應用程序中的隊列的運行方式不太一樣。在處理 AppDomain 中的數據時,您知道該數據只有一份,它完整地位于單一托管進程中。
而在云中,您的一部分數據可能在加利福尼亞,而另一部分可能在紐約,并且您可能會安排一個工作者角色在德克薩斯州對該數據進行處理,而另一工插件電感器作者角色在北達科他州進行數據處理。
很多開發人員在適應這種分布式計算和分布式數據時面臨著一些不熟悉的問題,例如對可能出現的故障進行編碼、針對數據提交形成多次重試的概念甚至冪等性的理念。
只要您不將 Windows Azure Queue 視為進程內的常規 CLR 隊列,其工作方式其實非常簡單。首先,應用程序將向隊列獲取一些數量的消息(需要記住,一次不會超過 20 條)并提供一個超時。此超時控制對其他隊列處理客戶端隱藏這些消息的時間。當應用程序成功完成需要對隊列消息進行的所有處理后,將刪除該消息。
如果應用程序引發異常或處理隊列消息失敗,則在超時期限過后,其他客戶端可以再次看到該消息。因此,當一個工作者角色處理失敗后,其他工作者角色可以繼續進行處理。向隊列提交消息非常簡單:應用程序直接或借助客戶端庫形成適當的 HTTP POST 消息,然后提交字符串或字節數組。隊列專門用于進行內部應用程序消息傳送和非永久存儲,因此這些消息占用的空間需要相當小。
如上所述,您可能安排多個工作者角色都嘗功率電感器試處理同一消息。雖然隱藏當前正在處理的消息的不可見超時很有幫助,但不能確保萬無一失。要完全避免沖突,您應該將您的引擎處理設計為冪等。換句話說,同一隊列消息應該可以由一個或多個工作者角色處理多次,而不會使電感器廠家應用程序處于不一致的狀態。
理想情況下,您希望工作者角色可以檢測出是否已完成對給定消息的處理。在編寫工作者角色來處理隊列消息時,請牢記您的代碼可能會嘗試處理已處理過的消息,盡管這個可能性微乎其微。
圖 1 中的代碼段顯示了如何使用隨 Windows Azure SDK 一起提供的 StorageClient 程序集創建消息并將其提交給 Windows Azure Queue。StorageClient 庫實際上只是 Windows Azure Storage HTTP 接口周圍的包裝。
圖 1 創建消息并將其提交給 Windows Azure Queue
string accountName;
string accountSharedKey;
string queueBaseUri;
string StorageCredentialsAccountAndKey credentials;
if (RoleEnvironment.IsAvailable)
{
// We are running in a cloud - INCLUDING LOCAL!
accountName =
RoleEnvironment.GetConfigurationSettingValue("AccountName"); 大功率電感廠家 |大電流電感工廠