使用Azure WebJob的一點心得


Azure WebApp Service 是非常適合中小型項目的雲服務。 從我實際使用的感受來看, 有如下幾個優點:

1 部署方便, 可以從VS一鍵發布

2 縮放方便, scale in / scale out 幾秒迅速實現

3 調試方便, 測試環境可以遠程debug;還可以實時從VS上觀測log

4 開發方便, 幾乎沒有額外的學習成本

另外, 通過VSTS, 還很好的集成了Devops的CICD; 通過slot做stage, 做A/B test。非常實用。 

 

但是今天, 我想分享的是WebApp Service的Web job。 關於Web job的介紹, 請參考MSDN文章。 

WebJob 兩種運行方式: 持續運行/按需運行。

持續運行, 一旦開始后, 就不會退出。 比較適合消息監控模式。 比如一直監控一個消息隊列, 當隊列中收到消息的時候, 后台任務便開始處理。處理完繼續等待新的消息到來。建議使用Azure WebJob SDK開發, 對於使用Azure隊列/存儲有非常友好的、簡單易學的開發框架。

按需運行,一種是手動去觸發它,比如做一些數據的初始化工作,只需要在部署完成做一次即可;

另一種是用定時器去觸發它。 現在在WebJob部署的時候, 很好的集成了CRON語法的調度設置, 比如 * */20 * * * *, 表示每20分鍾執行一次。 如果是從VS部署web job的話, 可以在web job的根路徑下放一個settings.job文件, 內容格式如下

1 {
2 /* execute at 3:00 amp everyday morning */
3     "schedule": "0 0 3 * * *"
4 }

這樣在部署的時候(選上“按需運行”), 就可以按預定的調度執行了。 在這種情況下, 可以考慮不需要WebJob SDK。

 

關於部署,除了在Portal上操作之外,在VS中,WebJob項目即可以單獨部署——跟WebSite部署一樣導入PublishSetting文件,也可以隨着指定WebSite一起部署(推薦)。 需要在VS中操作: 1 右鍵web項目, Add->; 2 選擇 Existing Project as Azure Web Job ; 3 選擇WebJob項目和運行方式。 

在WebSite項目中, 會多出一個文件 webjobs-list.json, 其中描述了有哪些web job

{
  "$schema": "http://schemastore.org/schemas/json/webjobs-list.json",
  "WebJobs": [
    {
      "filePath": "../myjob/myjob.csproj"
    }
}

 

在相關的Web job 下 , 會出現文件webjob-publish-settings.json, 其中描述了Web job的名稱和運行方式;並且項目會依賴nuget package: Microsoft.Web.WebJobs.Publish

1 {
2   "$schema": "http://schemastore.org/schemas/json/webjob-publish-settings.json",
3   "webJobName": "myjob",
4   "runMode": "Continuous"
5 }

 

再加上前面提到的settings.job文件, 那么部署的三要素:部署到哪/如何運行/如何調度,就都齊了

 

關於WebJob的實例縮放,默認的WebJob會隨着WebSite實例一起縮放, 也就是說, 有幾個WebSite instance, 就會有多少個WebJob instance。 所以,我們在設計Web Job的時候, 要考慮到多實例同時運行這個特點。使用消息隊列(Azure Storage Queue)就是一個很好的方式。 或者我們也可以讓Web Job無論如何都只有一個實例——對於使用Web Job SDK的,  請參考Microsoft.Azure.WebJobs.SingletonAttribute; 對於普通的exe/cmd 等webjob, 可以在settings.job中添加 

1 {
2  ......,
3  "is_singleton": true 
4 }

 

結尾語:

本文分享了使用Web job的兩種運行模式, Web Job的部署方式和Web Job實例縮放需要注意的問題。

Web Job 本質上會和Website 共享相同的計算資源。 所以在使用的時候還是需要注意。 如果Web Job特別的耗費計算資源, 為了不影響業務系統Website的運行, 建議不要放在一個Host Plan中。


免責聲明!

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



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