Dapr-绑定构建块

2023-02-19,,

前言:

 前篇-发布订阅文章对Dapr的订阅/发布进行了解,本篇继续对 绑定 构建块进行了解。

一、简介:

 Dapr 资源绑定使服务能够跨即时应用程序外部的外部资源集成业务操作。 来自外部系统的事件可能会触发服务中的操作,从而传递上下文信息。 然后,你的服务可以通过触发另一个外部系统中的事件来扩展操作,并传递上下文有效负载信息。 服务无需耦合或感知外部资源即可进行通信。 管道封装在预定义的 Dapr 组件中。 运行时可以轻松交换使用的 Dapr 组件,而无需更改代码。

 使用绑定,可以使用来自外部系统的事件或与外部系统的接口来触发应用程序。 此构建块提供了以下好处:

除去连接到消息传递系统 ( 如队列和消息总线 ) 并进行轮询的复杂性
聚焦于业务逻辑,而不是如何与系统交互的实现细节
使代码不受 SDK 或库的跟踪
处理重试和故障恢复
在运行时在绑定之间切换
构建具有特定于环境的绑定的可移植应用程序,不需要进行代码更改

二、工作原理

 Dapr 资源绑定以组件配置文件开头。 此 YAML 文件描述要绑定到的资源类型及其配置设置。 配置后,服务可以从资源接收事件,也可以触发其上的事件。

 下图是Dapr 资源绑定的概念体系结构:假设有一个 Twitter 帐户,每当用户推文关键字时都会触发事件。 服务公开接收并处理推文的事件处理程序。 完成后,服务将触发调用外部 Twilio 服务的事件。 Twilio 发送包含推文的短信

 

 初看之下,资源绑定行为可能类似于发布/订阅模式。 尽管它们有相似之处,但存在差异。

 发布/订阅:侧重于 Dapr 服务之间的异步通信。 资源绑定的范围要宽得多。

 绑定:侧重于跨软件平台的系统互操作性。 在微服务应用程序外部的不同应用程序、数据存储和服务之间交换信息。

三、功能

输入绑定

   输入绑定用于在发生来自外部资源的事件时触发应用程序。 可选的有效负载和元数据可以与请求一起发送。

   为了接收来自输入绑定的事件 :

定义描述绑定类型及其元数据 ( 连接信息等) 的组件 YAML
监听传入事件的 HTTP 终结点,或使用 gRPC 原型库获取传入事件

   

  步骤如下

    Dapr sidecar 读取绑定配置文件并订阅为外部资源指定的事件。 在示例中,事件源是 Twitter 帐户。
    在 Twitter 上发布匹配的推文时,在 Dapr sidecar 中运行的绑定组件会选取它并触发事件。
    Dapr sidecar 调用终结点 (即为绑定) 事件处理程序。 在示例中,服务侦听端口6000 上的终结点(/tweet)上的 HTTP POST。 由于它是 HTTP POST 操作,因此事件的 JSON 有效负载在请求正文中传递。
    处理事件后,服务将返回 HTTP 状态代码 200 OK 

  如果操作应出错,将返回相应的 400 或 500 级别 HTTP 状态代码。 对于具有至少 一次 传递保证的绑定,Dapr sidecar 将重试触发器。 

输出绑定

   输出绑定允许用户调用外部资源。 可选的有效负载和元数据可与调用请求一起发送。

   为了调用输出绑定:

定义描述绑定类型及其元数据 ( 连接信息等) 的组件 YAML
使用 HTTP 终结点或 gRPC 方法调用具有可选有效负载的绑定

   

  步骤如下

    Dapr sidecar 读取绑定配置文件,并提供有关如何连接到外部资源的信息。 在示例中,外部资源是 Twilio SMS 帐户。
    应用程序调用 /v1.0/bindings/sms Dapr sidecar 上的终结点。 在这种情况下,它使用 HTTP POST 调用 API。 也可使用 gRPC。
    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 组件实现绑定。 这些组件由社区提供。 每个绑定组件的配置都有特定于它所抽象的外部系统的元数据。 此外,它支持的命令和负载的结构将因绑定组件而异。

Dapr-绑定构建块的相关教程结束。

《Dapr-绑定构建块.doc》

下载本文的Word格式文档,以方便收藏与打印。