在 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 的綁定還有很多功能,詳細了解可以參考下面幾篇文章:

相關鏈接

Tags: