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对群组通信返回消息进行过滤. 示例描述 我们知道构建块基于通道之 ...
随机推荐
- RobotFramework+Selenium如何提高脚本稳定性
通过RF来跑selenium的脚本,正常运行一遍都没有问题,但如果要多次运行,提高脚本的稳定性,那么应该如何做呢? 当然有时候最简单最简单的方法就是直接通过sleep来等待,虽然简单粗暴,但会带来 ...
- .NET下使用ufun函数取CAM操作的进给速度
UF_PARAM_ask_subobj_ptr_value,这个函数在封装的时候,给了很大一个坑啊. NXOpen.UF.UFParam.AskSubobjPtrValue(ByVal param_t ...
- javascript-jquery-文档处理
一.移动元素 1.append():向每个匹配元素的内部追加内容.例如:$("选择器1").qppend("选择器2"):将会匹配选择器2的元素,移动到匹配选择 ...
- 关于takin-data,你想知道的都在这里(二)trace日志篇
相信大家在使用takin的过程中都见到过压测过程中实时展示的请求流量明细和请求详情了吧,像这样: 还有这样: 这样的请求流量明细和调用链详情是怎么实现的呢,今天就带大家探究下. 在前面的启动命令篇(h ...
- 第五课第四周笔记1:Transformer Network Intuition 变压器网络直觉
目录 Transformer Network Intuition 变压器网络直觉 Transformer Network Intuition 变压器网络直觉 深度学习中最令人兴奋的发展之一是 Tran ...
- 理解ASP.NET Core - 路由(Routing)
注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 Routing Routing(路由):更准确的应该叫做Endpoint Routing,负责 ...
- STM32核心板焊接
焊接工具和材料 电烙铁及烙铁头介绍 电烙铁有很多种,常用的有内热式.外热式.恒温式和吸锡式,为了方便携带,建议使内热式电烙铁,且要带烙铁架和海绵,烙铁架用于放置电烙铁,海绵用于擦拭烙铁锡渣,因此海绵不 ...
- vs2015 MSB600 "inf2cat.ext"已退出,代码为2
使用vs2015编译XDMA驱动过程中,报如下错误: vs2015 MSB600 "inf2cat.ext"已退出,代码为2 在使用Qt编译PCIE码表的过程中,出现C1038:无 ...
- linux 内核源代码情景分析——地址映射的全过程
linux 内核采用页式存储管理.虚拟地址空间划分成固定大小的"页面",由MMU在运行时将虚拟地址映射成某个物理内存页面中的地址.页式内存管理比段式内存管理有很多好处,但是由于In ...
- 手撸markdown web server
先上效果图 在线预览 powered by kingreatwill/mdserve. markdown项目:https://github.com/kingreatwill/open 目的 经常写笔记 ...