Dapr-綁定構建塊


前言:

 -發布訂閱文章對Dapr的訂閱/發布進行了解,本篇繼續對 綁定 構建塊進行了解。

一、簡介:

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

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

  • 除去連接到消息傳遞系統 ( 如隊列和消息總線 ) 並進行輪詢的復雜性
  • 聚焦於業務邏輯,而不是如何與系統交互的實現細節
  • 使代碼不受 SDK 或庫的跟蹤
  • 處理重試和故障恢復
  • 在運行時在綁定之間切換
  • 構建具有特定於環境的綁定的可移植應用程序,不需要進行代碼更改

二、工作原理

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

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

  

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

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

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

三、功能

  • 輸入綁定

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

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

    • 定義描述綁定類型及其元數據 ( 連接信息等) 的組件 YAML
    • 監聽傳入事件的 HTTP 終結點,或使用 gRPC 原型庫獲取傳入事件

   

   步驟如下

  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 將重試觸發器。 

  • 輸出綁定

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

   為了調用輸出綁定:

    • 定義描述綁定類型及其元數據 ( 連接信息等) 的組件 YAML
    • 使用 HTTP 終結點或 gRPC 方法調用具有可選有效負載的綁定

    

   步驟如下

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


免責聲明!

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



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