Dapr Workflow构建块的.NET Demo
Dapr 1.10版本中?帶來了最有亮點的特性就是工作流構(gòu)建塊的的發(fā)布,雖然是Alpha 階段,可以讓我們盡早在應用系統(tǒng)中規(guī)劃工作流, 在使用Dapr的系統(tǒng)中更好的編寫負責的分布式應用系統(tǒng)。Dapr 工作流使你能夠生成跨多個應用的長時間運行的持久進程或數(shù)據(jù)流。Dapr 工作流可以與其他 Dapr API 構(gòu)建基塊結(jié)合使用。例如,工作流可以通過服務調(diào)用調(diào)用另一個服務、觸發(fā)綁定或檢索機密,從而使您能夠編排和構(gòu)建復雜的應用程序方案。
Dapr 工作流構(gòu)建塊的提案早在2022年的5月份提出,計劃在 Dapr Runtime 中構(gòu)建工作流引擎,社區(qū)反映非常積極。這個提案(https://github.com/dapr/dapr/issues/4576)內(nèi)容比較長 ,敖小劍?有一個翻譯的中文版:[譯] Dapr 工作流提案。在Alpha版本里完成了以下內(nèi)容:
- 內(nèi)置工作流引擎將作為初始預覽功能提供 ,這個內(nèi)置工作流引擎是Azure 上的?持久任務框架?(DTF),在在Azure 基礎設施有大量的應用,它是用.NET 編寫的。Dapr團隊正在把這個實踐抽象成工作流構(gòu)建塊,基于Dapr Actor構(gòu)建塊來實現(xiàn)。Beta 版本會實現(xiàn) Logic Apps 作為工作流引擎,當然還有更多的工作流引擎可以集成進入Dapr Workflow構(gòu)建塊里。 
- API 將支持 3 種方法(啟動、停止、獲取狀態(tài))的工作流管理 
- API 將作為 alpha 版發(fā)布 
- 內(nèi)置引擎的 API 支持 
- 創(chuàng)作 SDK 將支持:.NET 
- 管理 API SDK 將支持:.NET 
- 文檔,詳細的介紹了Dapr Workflow構(gòu)建塊的工作原理等,推薦大家詳細的看一看:https://docs.dapr.io/developing-applications/building-blocks/workflow/workflow-overview/ 
- 代碼示例(.NET ),快速入門文檔里包含了。 
Dapr 工作流構(gòu)建塊目前是alpha版本,自然是有很多限制的,不推薦應用于生產(chǎn)環(huán)境中,至少等到beta版本時再考慮應用于生產(chǎn),通常應用于生產(chǎn)環(huán)境的組件都是stable 版本的。Dapr Workflow 構(gòu)建塊讓我們看到了他的潛力,Dapr Actor 模塊基本上.NET圈子用的多,在其他java,go等用的很少,工作流模塊組合上 Actor 構(gòu)建塊會讓Dapr 上一個臺階,和其他類似框架的領先度進一步加大。我們常說“ 技術總是在短期內(nèi)被高估,但是在長期又被低估。” 再來看看這句話,短期內(nèi)被高估是因為在短期內(nèi)的需求所迫,長期內(nèi)被低估是因為技術的隱形需求要比實際上的業(yè)務務求多得多。
作為開發(fā)者,你需要考慮你將要投身的技術領域長期的隱形成本與試錯成本。再者,投入到某個技術領域中其實不能走馬觀花,而要長期以往的進行深入研究與學習,才能獲取更高的技術視野。Dapr 作為云原生時代的開發(fā)框架值得投入進去深入研究和學習。
在Dapr的?components-contrib?倉庫里 也有一個?https://github.com/dapr/components-contrib/tree/master/workflows?,其中包含了一個分布式調(diào)度框架
Temporal?https://github.com/temporalio/temporal?的一個組件實現(xiàn)。
現(xiàn)在 可以使用 .NET SDK 體驗 Dapr 工作流,在Dapr 工作流的快速入門文檔里包含了.NET 的示例,創(chuàng)建一個簡單的控制臺應用程序來演示 Dapr 的工作流編程模型和工作流管理 API。
控制臺應用order-processor 啟動并管理在狀態(tài)存儲中存儲和檢索數(shù)據(jù)的工作流的生命周期。工作流OrderProcessingWorkflow 由四個工作流活動或任務組成:
- NotifyActivity:利用記錄器在整個工作流程中打印出消息 
- ReserveInventoryActivity:檢查狀態(tài)存儲以確保有足夠的庫存供購買 
- ProcessPaymentActivity:處理和授權(quán)付款 
- UpdateInventoryActivity:從狀態(tài)存儲中刪除請求的物料,并使用新的剩余庫存值更新存儲 
快速入門存儲庫中提供的示例代碼。倉庫地址:https://github.com/dapr/quickstarts.git ,我們把它克隆到本地,進入到示例代碼目錄?order-processor:
cd workflows/csharp/sdk/order-processor
在終端中,與 Dapr Sidecar 一起啟動訂單處理器應用:dapr run --app-id order-processor dotnet run ,下面是一次完整運行的輸出:
這里面發(fā)生的事情大概如下:
為工作流生成唯一的訂單 ID(在上面的示例中為49caa2d7 ),并啟動工作流。
工作流活動NotifyActivity發(fā)送一條通知,指出已收到 10 輛汽車的訂單。
工作流活動ReserveInventoryActivity檢查庫存數(shù)據(jù),確定您是否可以提供訂購的物料,并使用庫存中的汽車數(shù)量進行響應。
您的工作流將啟動并通知您其狀態(tài)。
工作流活動ProcessPaymentActivity開始處理訂單49caa2d7 付款并確認是否成功。
處理訂單后,工作流活動UpdateInventoryActivity使用當前可用汽車更新庫存。
工作流活動NotifyActivity發(fā)送一條通知,指出訂單 49caa2d7 已完成。
工作流在完成時終止。
總結(jié)
以上是生活随笔為你收集整理的Dapr Workflow构建块的.NET Demo的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 音频基础说明
- 下一篇: Latex语法学习08:打通latex、
