Dapr - 綁定構建塊

一、簡介:

 Dapr 資源綁定使服務能夠跨即時應用程序外部的外部資源集成業務操作。來自外部系統的事件可能會觸發服務中的操作,從而傳遞上下文信息。然後,你的服務可以通過觸發另一個外部系統中的事件來擴展操作,並傳遞上下文有效負載信息。服務無需耦合或感知外部資源即可進行通信。管道封裝在預定義的 Dapr 組件中。運行時可以輕鬆交換使用的 Dapr 組件,而無需更改代碼。

 使用綁定,可以使用來自外部系統的事件或與外部系統的接口來觸發應用程序。此構建塊提供了以下好處:

二、工作原理

 Dapr 資源綁定以組件配置文件開頭。此 YAML 文件描述要綁定到的資源類型及其配置設置。配置後,服務可以從資源接收事件,也可以觸發其上的事件。

 下圖是 Dapr 資源綁定的概念體系結構:假設有一個 Twitter 帳戶,每當用戶推文關鍵字時都會觸發事件。服務公開接收並處理推文的事件處理程序。完成後,服務將觸發調用外部 Twilio 服務的事件。Twilio 發送包含推文的短信

  

 初看之下,資源綁定行爲可能類似於發佈 / 訂閱模式。儘管它們有相似之處,但存在差異。

 發佈 / 訂閱:側重於 Dapr 服務之間的異步通信。資源綁定的範圍要寬得多。

 綁定:側重於跨軟件平臺的系統互操作性。在微服務應用程序外部的不同應用程序、數據存儲和服務之間交換信息。

三、功能

   輸入綁定用於在發生來自外部資源的事件時觸發應用程序。可選的有效負載和元數據可以與請求一起發送。

   爲了接收來自輸入綁定的事件 :

   

   步驟如下

  1. Dapr sidecar 讀取綁定配置文件並訂閱爲外部資源指定的事件。在示例中,事件源是 Twitter 帳戶。

  2. 在 Twitter 上發佈匹配的推文時,在 Dapr sidecar 中運行的綁定組件會選取它並觸發事件。

  3. Dapr sidecar 調用終結點 (即爲綁定) 事件處理程序。在示例中,服務偵聽端口 6000 上的終結點 (/tweet) 上的 HTTP POST。由於它是 HTTP POST 操作,因此事件的 JSON 有效負載在請求正文中傳遞。

  4. 處理事件後,服務將返回 HTTP 狀態代碼 200 OK

  **如果操作應出錯,將返回相應的 400 或 500 級別 HTTP 狀態代碼。對於具有至少 一次 傳遞保證的綁定,Dapr sidecar 將重試觸發器。 **

   輸出綁定允許用戶調用外部資源。可選的有效負載和元數據可與調用請求一起發送。

   爲了調用輸出綁定:

    

   步驟如下

  1. Dapr sidecar 讀取綁定配置文件,並提供有關如何連接到外部資源的信息。在示例中,外部資源是 Twilio SMS 帳戶。

  2. 應用程序調用 /v1.0/bindings/sms Dapr sidecar 上的終結點。在這種情況下,它使用 HTTP POST 調用 API。也可使用 gRPC。

  3. Dapr sidecar 中運行的綁定組件調用外部消息傳送系統來發送消息。該消息將包含 POST 請求中傳遞的有效負載。

   綁定組件支持情況:

| Name | 輸入
綁定 | 輸出
綁定 | 狀態 | 組件版本 | 自從 | | --- | :-: | :-: | --- | --- | --- | | Apple Push Notifications (APN) |
| ✅ | Alpha | v1 | 1.0 | | Cron (scheduler) | ✅ | ✅ | Alpha | v1 | 1.0 | | HTTP |
| ✅ | GA | v1 | 1.0 | | InfluxDB |
| ✅ | Alpha | v1 | 1.0 | | Kafka | ✅ | ✅ | Alpha | v1 | 1.0 | | Kubernetes 事件 | ✅ |
| Alpha | v1 | 1.0 | | 本地存儲 |
| ✅ | Alpha | v1 | 1.1 | | MQTT | ✅ | ✅ | Alpha | v1 | 1.0 | | MySQL |
| ✅ | Alpha | v1 | 1.0 | | PostgrSQL |
| ✅ | Alpha | v1 | 1.0 | | Postmark |
| ✅ | Alpha | v1 | 1.0 | | RabbitMQ | ✅ | ✅ | Alpha | v1 | 1.0 | | Redis |
| ✅ | Alpha | v1 | 1.0 | | SMTP |
| ✅ | Alpha | v1 | 1.0 | | Twilio |
| ✅ | Alpha | v1 | 1.0 | | Twitter | ✅ | ✅ | Alpha | v1 | 1.0 | | SendGrid |
| ✅ | Alpha | v1 | 1.0 |

四、.NET Core 應用

 **1、創建綁定:**添加綁定組件名:myevent

  創建以下 YAML 文件,名爲 binding.yaml,並將其保存到應用程序的 components 子文件夾中。(使用具有 --components-path 標記 的 dapr run 命令來指向自定義組件目錄)

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: myevent
  namespace: default
spec:
  type: bindings.kafka
  version: v1
  metadata:
  - name: topics
    value: topic1
  - name: brokers
    value: localhost:9092
  - name: consumerGroup
    value: group1

 2、.NET CORE 綁定調用

  Dapr .NET SDK 爲 .NET Core 開發人員提供特定於語言的支持。使用 DaprClient.InvokeBindingAsync() 方法簡化了調用已配置的輸出綁定:

private async Task SendSMSAsync([FromServices] DaprClient daprClient)
{
    var message = "Welcome to this awesome service";
    var metadata = new Dictionary<string, string>
    {
      { "toNumber", "555-3277" }
    };
   //執行綁定操作:sms的create操作
    await daprClient.InvokeBindingAsync("myevent", "create", message, metadata);
}

 3、調用 Dapr 綁定:

curl -X POST -H 'Content-Type: application/json' http://localhost:3500/v1.0/bindings/myevent -d '{ "data": { "message": "Hi!" }, "operation": "create" }'

五、總結:

 Dapr 資源綁定使你可以與不同的外部資源和系統集成,而無需依賴於其庫或 Sdk。這些外部系統不一定必須是消息傳遞系統,例如服務總線或消息代理。數據存儲和 web 資源(如 Twitter 或 SendGrid)還存在綁定。

 輸入綁定 (或觸發器) 對外部系統中發生的事件做出響應。它們調用在你的應用程序中預先配置的公共 HTTP 終結點。Dapr 使用配置中的綁定名稱來確定要在應用程序中調用的終結點。

 輸出綁定將消息發送到外部系統。通過在 /v1.0/bindings/<binding-name> Dapr **sidecar **上的終結點上執行 HTTP POST 來觸發輸出綁定。還可以使用 gRPC 來調用綁定。.NET SDK 提供 InvokeBindingAsync 使用 gRPC 調用 Dapr 綁定的方法。

 使用 Dapr 組件實現綁定。這些組件由社區提供。每個綁定組件的配置都有特定於它所抽象的外部系統的元數據。此外,它支持的命令和負載的結構將因綁定組件而異。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/u81a0aU55Tiw4IRt1dG2Ww