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/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 | ||
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对群组通信返回消息进行过滤. 示例描述 我们知道构建块基于通道之 ...
随机推荐
- 【原创】SystemVerilog中的typedef前置声明方式
SystemVerilog中,为了是代码简洁.易记,允许用户根据个人需要使用typedef自定义数据类型名,常用的使用方法可参见"define和typedef区别".但是在Syst ...
- 解决 Delegate IDE build/run actions to Maven 编译两次的问题
起因:我的电脑炸了,吸取教训,以后重要的东西千万不要存在C盘,特别是我们 IT 行业的,代码和文档都是一点一点积累的经验.突然没了,总感觉少了点啥,平时我的代码都是放在D盘,但是很多文档放在C盘,导致 ...
- 破解安装pyhotn
1.网址 https://www.jetbrains.com/pycharm/download/#section=windows,打开页面,点击下载专业版 2.这是下载好的文件,双击运行即可. //详 ...
- 深度学习——手动实现残差网络ResNet 辛普森一家人物识别
深度学习--手动实现残差网络 辛普森一家人物识别 目标 通过深度学习,训练模型识别辛普森一家人动画中的14个角色 最终实现92%-94%的识别准确率. 数据 ResNet介绍 论文地址 https:/ ...
- Docker 常见命令
Docker 运行流程 辅助命令 # 1.安装完成辅助命令 docker version -------------------------- 查看docker的信息 docker info ---- ...
- windows10安装MySQL8.0.27
1.官网下载安装包:https://dev.mysql.com/downloads/mysql/ 2.将解压文件解压到你安装的目录:D:\mysql-8.0.27-winx64 注意:不要放在有中文名 ...
- 痞子衡嵌入式:超级下载算法RT-UFL v1.0在恩智浦MCUXpresso IDE下的使用
痞子衡主导的"学术"项目 <RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计> v1.0 版发布近 4 个月了,部分客户已经在实际项目开发调试中用上了这个 ...
- 【Java虚拟机7】ClassLoader源码文档翻译
前言 学习JVM类加载器,ClassLoader这个类加载器的核心类是必须要重视的. Notes:下方蓝色文字是自己的翻译(如果有问题请指正).黑色文字是源文档.红色文字是自己的备注. ClassLo ...
- 如何理解Stand SPI Dual SPI 和Quad SPI??
1.首先看一下接口 Standard SPI: CLK, /CS, DI, DO, /WP, /Hold Dual SPI: CLK, /CS, IO0, IO1, /WP, /Hold Quad S ...
- UVM RAL模型和内置seq
转载:UVM RAL模型:用法和应用_寄存器 (sohu.com) 在系统设计中通常会面临两大挑战:缩小技术节点的规模和上市时间(TTM,Time to Market).为了适应激烈的市场竞争,大多数 ...