在 Dapr 中使用 Cron 綁定的計劃任務
我昨天寫了一篇關於在微服務應用程式中採用Dapr的好處的文章《從服務之間的調用來看 我們為什麼需要Dapr》[1], 在那篇文章中,我們專註於“服務調用”構建塊 [2]。在這篇文章中,我想向你展現一個特別有用的功能,它是由”綁定”構建塊[3]實現的。
Dapr 綁定
Dapr 中的”綁定”概念對於任何使用過 Azure Functions 的人來說都很熟悉,它們揭示了與各種第三方服務交互的簡化方式,可以說微軟的技術都是一脈相承的,Dapr 就是毫不誇張的來說就是微軟技術的集大成者。
綁定可以是”輸入”或”輸出”。輸入綁定(也稱為”觸發器”)允許 Dapr 訂閱外部系統中的事件,並在服務上調用終結點,以便您知道發生了什麼。Azure 中的良好示例是訂閱事件網格上的事件[4]或服務匯流排[5]上的消息。但是有許多受支援的綁定,包括Twitter之類的東西,因此每當有符合您的搜索條件的推文時,您都可以收到通知。
輸出綁定允許您將數據發送到外部服務。在 Azure 中,這可能是將消息發布到隊列,將文檔寫入 Cosmos DB[6]。或者您可以使用它給Twilio發送簡訊[7]。
綁定的優點和缺點
綁定的一個優點是,它們可以大大簡化應用程式程式碼,因為它們消除了連接到服務通常需要的許多繁瑣的模板程式碼。
另一個優點是它們提供了一定程度的抽象。雖然由於某些綁定處理的數據具有特定於服務的性質,因此無法與其他替代項交換,但交換組件的功能在開發/測試環境中可能非常有用,因為在開發/測試環境中,你可能不希望或不需要與實際服務進行實際通訊。
綁定的主要缺點是,它們通常只公開基礎平台功能的相當有限的子集,按照二八原則,通常這個可以滿足我們80%場景的需求了,從這個角度來看也不是什麼缺點了,你同意我的看法嗎?因此,如果您是高級用戶,那麼您可能更喜歡直接使用服務的SDK。當然,Dapr不會阻止你這樣做 – 綁定是完全可選的功能。
Cron綁定
我想特別給你介紹的“cron”綁定[8]是一個特例。它不支援連接到外部系統,它卻可以輕鬆設置計劃任務。要進行此設置,您需要定義一個組件 YAML 文件。我這裡用官方文檔里的一個示例[8] 進行說明,您可以自定義 以滿足您的需求。這支援常規的 cron 語法和一些簡化的快捷方式,例如每十五分鐘一次,如下所示。
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: <NAME>
namespace: <NAMESPACE>
spec:
type: bindings.cron
version: v1
metadata:
– name: schedule
value: “@every 15m” # valid cron schedule
scopes:
– catalog
我所做的唯一”高級”操作是通過使用 scopes
屬性[9]將此組件限制為僅應用於單個 Dapr 服務- 在此示例中為服務catalog ,現在,我們需要做的就是在與組件名稱匹配的終結點上進行偵聽。在此示例中,它稱為scheduled
.請注意,這將作為 HTTP POST請求發出,因此在下面的示例中,我將演示簡單的 Node.js Express 應用程式如何在端點上接收調用並向控制台寫入消息。
app.post(‘/scheduled’, async function(req, res){
console.log(“scheduled endpoint called”, req.body)
res.status(200).send()
});
如果我們運行此命令,我們將看到 Dapr 邊車每五分鐘調用一次終結點/scheduled。 如果在你的項目中沒有計劃任務的解決方案,Dapr提供了如此簡單易用的開箱即用選項真是太好了。
Dapr 的綁定還有很多功能,詳細了解可以參考下面幾篇文章:
-
Dapr + .NET Core實戰(六)綁定 [10]
-
Dapr-綁定構建塊 [11]
-
手把手教你學Dapr – 8. 綁定 [12]
-
Dapr項目應用探索[13]
相關鏈接
- [1] 從服務之間的調用來看 我們為什麼需要Dapr : //www.cnblogs.com/shanyou/p/15864968.html
- [2] 服務調用構建塊 : //docs.dapr.io/developing-applications/building-blocks/service-invocation/service-invocation-overview/
- [3] 綁定構建塊://docs.dapr.io/developing-applications/building-blocks/bindings/bindings-overview/
- [4] 事件網格上的事件://docs.dapr.io/reference/components-reference/supported-bindings/eventgrid/
- [5] 服務匯流排://docs.dapr.io/reference/components-reference/supported-bindings/servicebusqueues/
- [6] 將文檔寫入Cosmos DB: //docs.dapr.io/reference/components-reference/supported-bindings/cosmosdb/
- [7] Twilio 發送簡訊://docs.dapr.io/reference/components-reference/supported-bindings/twilio/
- [8] Cron 綁定://docs.dapr.io/reference/components-reference/supported-bindings/cron/
- [9] scopes屬性://docs.dapr.io/zh-hans/operations/components/component-scopes/
- [10] Dapr + .NET Core實戰(六)綁定 ://www.cnblogs.com/chenyishi/p/15343564.html
- [11] Dapr-綁定構建塊 ://www.cnblogs.com/cwsheng/p/15552408.html
- [12] 手把手教你學Dapr – 8. 綁定 ://www.cnblogs.com/MASA/p/15822185.html
- [13] Dapr項目應用探索 : //www.cnblogs.com/cwsheng/p/15733159.html