Dapr-绑定构建块
前言:
前篇-发布订阅文章对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/smsDapr 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 | ||
| 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-绑定构建块的更多相关文章
- 面向.NET开发人员的Dapr- actors 构建块
原文地址:https://docs.microsoft.com/en-us/dotnet/architecture/dapr-for-net-developers/actors The actor m ...
- Dapr-Actor构建块
前言: 前篇-绑定 文章对Dapr的绑定构建块进行了解,本篇继续对 Actor 构建块进行了解学习. 一.Actor简介: Actors 为最低级别的"计算单元". 换句话说,您将 ...
- 企业架构研究总结(35)——TOGAF架构内容框架之构建块(Building Blocks)
之前忙于搬家移居,无暇顾及博客,今天终于得闲继续我的“政治课”了,希望之后至少能够补完TOGAF方面的内容.从前面文章可以看出,笔者并无太多能力和机会对TOGAF进行理论和实际的联系,仅可对标准的文本 ...
- TOGAF架构内容框架之构建块(Building Blocks)
TOGAF架构内容框架之构建块(Building Blocks) 之前忙于搬家移居,无暇顾及博客,今天终于得闲继续我的“政治课”了,希望之后至少能够补完TOGAF方面的内容.从前面文章可以看出,笔者并 ...
- JavaScript是如何工作的:Web Workers的构建块 + 5个使用他们的场景
摘要: 理解Web Workers. 原文:JavaScript是如何工作的:Web Workers的构建块 + 5个使用他们的场景 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 这 ...
- 在linux 创建网络会话和绑定两块网卡
1. 如果我们在公司网络中要手动指定网络的IP地址,当我们回到家里则是使用DHCP(动态主机配置协议)自动分配IP地址.这就有点麻烦了,因为要频繁的修改IP地址,所以接下来我们来创建网络会话----- ...
- JBoss 系列十七:使用JGroups构建块MessageDispatcher 构建群组通信应用
内容概要 本部分说明JGroups构建块接口MessageDispatcher,具体提供一个简单示例来说明如何使用JGroups构建块MessageDispatcher 构建群组通信应用 示例描述 构 ...
- JBoss 系列十八:使用JGroups构建块RpcDispatcher构建群组通信应用
内容概要 本部分说明JGroups构建块接口RpcDispatcher,具体提供一个简单示例来说明如何使用JGroups构建块RpcDispatcher构建群组通信应用. 示例描述 类似Message ...
- JBoss 系列十九:使用JGroups构建块RspFilter对群组通信返回消息进行过滤
内容概述 本部分说明JGroups构建块接口RspFilter,具体提供一个简单示例来说明如何使用JGroups构建块RspFilter对群组通信返回消息进行过滤. 示例描述 我们知道构建块基于通道之 ...
随机推荐
- 题解 Crash 的文明世界
题目传送门 题目大意 给出一个\(n\)个点的树,和常数\(k\),对于\(\forall i\in[1,n]\),求出: \[\sum_{j=1}^{n} \text{dist}(i,j)^k \] ...
- 实现前后端分离,最好的方案就是SPA(Single Page Application)
从通常意义来讲,说到必须,就是指最佳实践上,实现前后端分离,最好的方案就是SPA.所以才会有 前后端分离=SPA 的近似,忽视了其中的差别.但是,既然有疑问了,我们就来看一下,为什么SPA是实现前后端 ...
- Linux——Docker安装
1. 安装Docker i :环境准备:Linux要求内核3.0以上 ii:安装 #1.卸载旧版本 yum remove docker \ docker-client \ docker-client- ...
- css单位px,em,rem区别
在css中单位长度用的最多的是px.em.rem,这三个的区别是: px是固定的像素,一旦设置了就无法因为适应页面大小而改变. em和rem相对于px更具有灵活性,他们是相对长度单位,意思是长度不是定 ...
- 4个实验,彻底搞懂TCP连接的断开
前言 看到这个标题你可能会说,TCP 连接的建立与断开,这个我熟,不就是三次握手与四次挥手嘛.且慢,脑海中可以先尝试回答这几个问题: 四次挥手是谁发起的? 如果断电/断网了连接会断开吗? 什么情况下没 ...
- spring cloud ribbon的使用
上节我们学会了如何搭建一个eureka server服务,本节我们使用ribbon来实现服务间的调用. 前置条件: 1.创建几个工程 eureka-server |- 服务注册 ...
- linux shell脚本中的开头#!/bin/bash的含义
对于linux上需要执行 的shell脚本,通常第一行的内容是 #!/bin/bash 当然有很多时候不规范的写法可以忽略掉这一句,执行起来好像也是ok,结果没什么不一样 .. 这只是因为在我们常用 ...
- nvidia-msi命令解读
nvidia-msi 或者 watch -n 1 nvidia-smi 打印出表格中: 第一栏的Fan:N/A是风扇转速,从0到100%之间变动,这个速度是计算机期望的风扇转速,实际情况下如果风扇堵转 ...
- cf 11A Increasing Sequence(水,)
题意: A sequence a0, a1, ..., at - 1 is called increasing if ai - 1 < ai for each i: 0 < i < ...
- OpenEuler树莓派基础实验
OpenEuler树莓派基础实验 1.任务详情 1. 参考https://www.cnblogs.com/rocedu/p/14615565.html 完成OpenEuler的安装,提交过程博客和截图 ...