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对群组通信返回消息进行过滤. 示例描述 我们知道构建块基于通道之 ...
随机推荐
- 易华录 X ShardingSphere|葫芦 App 后台数据处理的逻辑捷径
"ShardingSphere 大大简化了分库分表的开发和维护工作,对于业务的快速上线起到了非常大的支撑作用,保守估计 ShardingSphere 至少为我们节省了 4 个月的研发成本.& ...
- Servlet和Servlet容器
Java Servlet(Java服务器小程序)是一个基于Java技术的Web组件,运行在服务器端,它由Servlet容器所管理,用于生成动态的内容, Servlet是平台独立的Java类,编写一个S ...
- DRF的action装饰器
1.action装饰器 Django默认的路由分发规则决定了视图函数只能以get.post等请求方式命名,如果想要使用自定义的方式命名,我们可以使用action去映射请求方法名与自定义方法 view. ...
- 好奇!仅 13kB 大小的游戏,源码长啥样?
这个马赛克风格的表情正好 13Kb,有人竟然能用一个表情大小的空间,制作个游戏出来.我就不信这么点的地儿,能写出个花来?游戏能好玩吗?因为这些游戏点开就能玩,我抱着试一试的心态把玩了一会. 事实证明是 ...
- C++ 与 Visual Studio 2022 和 WSL(五)——WSL2
Build and Debug C++ with WSL 2 Distributions and Visual Studio 2022 References Build and Debug C++ w ...
- perl 不支持多条件比较
perl 不支持多条件比较,if(a < $var < b),这个条件表达式在C语言里面是支持的,但是在Perl中必须写成if(($var > a)&&($var & ...
- 【c++ Prime 学习笔记】第8章 IO库
C++语言不直接处理输入输出,而是通过标准库中的一组类来处理IO 1.2节介绍的IO库: istream(输入流)类型,提供输入 ostream(输出流)类型,提供输出 cin,是istream对象, ...
- Windows平台编译器相关的几个预定义宏
WIN32 是在windows.h 中定义的宏,包含winodws.h则定义该宏 _WIN32/_WIN64跟windows平台有关的宏,_WIN32在windows 32位和64位下都有该宏,_ ...
- stm32电机控制之控制两路直流电机!看完你会了吗
手头上有一个差分驱动的小车,使用两个直流电机驱动,要实现小车的在给定速度下运动,完成直线行驶,转向,加速,刹车等复杂运动. 使用的电机是12v供电的直流电机,带编码器反馈,这样就可以采用闭环速度控制, ...
- JVM:垃圾收集器与对象的"存活"问题
垃圾收集器垃圾收集(Garbage Collection,GC).当需要排查各种内存溢出.内存泄露问题时,当垃圾收集成为系统更高并发量的瓶颈时,我们需要去了解GC和内存分配. 检查对象的"存 ...