2015-07-20 155 views
0

爲了處理清理工作,將爲每8小時運行的處理清理工作,目前我們已經實現:使用Azure存儲隊列

  1. 創建使用Azure的計劃,在存儲隊列時把消息調度作業它被觸發。
  2. 以這樣的方式實現客戶端,即它將連續輪詢並在接收到消息時進行處理。客戶的樣品實施是:

    while (!CancellationToken.Value.IsCancellationRequested)  
         { 
    
         var message = await client.GetMessageAsync(); 
    
          if (message != null) 
          { 
           // process the message 
          } 
    } 
    

但問題是,我們正在等待indefinetly即使我們知道,我們只8小時後得到的消息,並按照文件,每次嘗試讀取從隊列消息會招致成本。

如何優化這種方式,讓聽衆可以隨時隨地產生每個可配置的時間而不是連續的循環?

+0

爲什麼你沒有你的計劃工作來做清理?請參閱[計劃的網絡作業](https://azure.microsoft.com/zh-CN/documentation/articles/web-sites-create-web-jobs/#CreateScheduled)。 – mert

回答

1

你沒有提到你的客戶是如何部署的,所以我希望以下策略之一可以幫助你優化。 如果客戶端部署爲雲資源:您可以使用Azure自動化服務安排雲資源的啓動/停止,例如:在消息出現在隊列中之前啓動雲服務,並在完成後觸發關閉。

如果您的客戶端部署的前提:你當然可以使用了Thread.Sleep降低命中

還要考慮Azure的服務總線,它允許您訂閱的郵件/主題數。

+0

感謝您的回覆。客戶端部署爲雲資源。 Azure服務總線不能使用,因爲如果服務總線不可用,則可以使用此策略作爲回退。此外,自動化無法使用,因爲相同的雲服務託管不同的工作,這將創建不同的監聽器,其中只有少數是我們不應該等待的背景。 –

+0

好的。您還可以嘗試將執行不同作業的複合雲服務轉換爲多個獨立的微服務,稍後可以使用WebJobs/Automation/WebAPI獨立部署和調度這些服務。 –

+0

微服務不能使用,因爲服務結構實現離我們的範圍很遠。 –

相關問題