前言:

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

一、简介:

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

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

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

二、工作原理

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

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

 

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

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

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

三、功能

  • 输入绑定

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

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

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

   

  步骤如下

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

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

  • 输出绑定

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

   为了调用输出绑定:

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

   

  步骤如下

  1. Dapr sidecar 读取绑定配置文件,并提供有关如何连接到外部资源的信息。 在示例中,外部资源是 Twilio SMS 帐户。
  2. 应用程序调用 /v1.0/bindings/sms Dapr sidecar 上的终结点。 在这种情况下,它使用 HTTP POST 调用 API。 也可使用 gRPC。
  3. 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-绑定构建块的更多相关文章

  1. 面向.NET开发人员的Dapr- actors 构建块

    原文地址:https://docs.microsoft.com/en-us/dotnet/architecture/dapr-for-net-developers/actors The actor m ...

  2. Dapr-Actor构建块

    前言: 前篇-绑定 文章对Dapr的绑定构建块进行了解,本篇继续对 Actor 构建块进行了解学习. 一.Actor简介: Actors 为最低级别的"计算单元". 换句话说,您将 ...

  3. 企业架构研究总结(35)——TOGAF架构内容框架之构建块(Building Blocks)

    之前忙于搬家移居,无暇顾及博客,今天终于得闲继续我的“政治课”了,希望之后至少能够补完TOGAF方面的内容.从前面文章可以看出,笔者并无太多能力和机会对TOGAF进行理论和实际的联系,仅可对标准的文本 ...

  4. TOGAF架构内容框架之构建块(Building Blocks)

    TOGAF架构内容框架之构建块(Building Blocks) 之前忙于搬家移居,无暇顾及博客,今天终于得闲继续我的“政治课”了,希望之后至少能够补完TOGAF方面的内容.从前面文章可以看出,笔者并 ...

  5. JavaScript是如何工作的:Web Workers的构建块 + 5个使用他们的场景

    摘要: 理解Web Workers. 原文:JavaScript是如何工作的:Web Workers的构建块 + 5个使用他们的场景 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 这 ...

  6. 在linux 创建网络会话和绑定两块网卡

    1. 如果我们在公司网络中要手动指定网络的IP地址,当我们回到家里则是使用DHCP(动态主机配置协议)自动分配IP地址.这就有点麻烦了,因为要频繁的修改IP地址,所以接下来我们来创建网络会话----- ...

  7. JBoss 系列十七:使用JGroups构建块MessageDispatcher 构建群组通信应用

    内容概要 本部分说明JGroups构建块接口MessageDispatcher,具体提供一个简单示例来说明如何使用JGroups构建块MessageDispatcher 构建群组通信应用 示例描述 构 ...

  8. JBoss 系列十八:使用JGroups构建块RpcDispatcher构建群组通信应用

    内容概要 本部分说明JGroups构建块接口RpcDispatcher,具体提供一个简单示例来说明如何使用JGroups构建块RpcDispatcher构建群组通信应用. 示例描述 类似Message ...

  9. JBoss 系列十九:使用JGroups构建块RspFilter对群组通信返回消息进行过滤

    内容概述 本部分说明JGroups构建块接口RspFilter,具体提供一个简单示例来说明如何使用JGroups构建块RspFilter对群组通信返回消息进行过滤. 示例描述 我们知道构建块基于通道之 ...

随机推荐

  1. 易华录 X ShardingSphere|葫芦 App 后台数据处理的逻辑捷径

    "ShardingSphere 大大简化了分库分表的开发和维护工作,对于业务的快速上线起到了非常大的支撑作用,保守估计 ShardingSphere 至少为我们节省了 4 个月的研发成本.& ...

  2. Servlet和Servlet容器

    Java Servlet(Java服务器小程序)是一个基于Java技术的Web组件,运行在服务器端,它由Servlet容器所管理,用于生成动态的内容, Servlet是平台独立的Java类,编写一个S ...

  3. DRF的action装饰器

    1.action装饰器 Django默认的路由分发规则决定了视图函数只能以get.post等请求方式命名,如果想要使用自定义的方式命名,我们可以使用action去映射请求方法名与自定义方法 view. ...

  4. 好奇!仅 13kB 大小的游戏,源码长啥样?

    这个马赛克风格的表情正好 13Kb,有人竟然能用一个表情大小的空间,制作个游戏出来.我就不信这么点的地儿,能写出个花来?游戏能好玩吗?因为这些游戏点开就能玩,我抱着试一试的心态把玩了一会. 事实证明是 ...

  5. C++ 与 Visual Studio 2022 和 WSL(五)——WSL2

    Build and Debug C++ with WSL 2 Distributions and Visual Studio 2022 References Build and Debug C++ w ...

  6. perl 不支持多条件比较

    perl 不支持多条件比较,if(a < $var < b),这个条件表达式在C语言里面是支持的,但是在Perl中必须写成if(($var > a)&&($var & ...

  7. 【c++ Prime 学习笔记】第8章 IO库

    C++语言不直接处理输入输出,而是通过标准库中的一组类来处理IO 1.2节介绍的IO库: istream(输入流)类型,提供输入 ostream(输出流)类型,提供输出 cin,是istream对象, ...

  8. Windows平台编译器相关的几个预定义宏

    WIN32 是在windows.h 中定义的宏,包含winodws.h则定义该宏 _WIN32/_WIN64跟windows平台有关的宏,_WIN32在windows   32位和64位下都有该宏,_ ...

  9. stm32电机控制之控制两路直流电机!看完你会了吗

    手头上有一个差分驱动的小车,使用两个直流电机驱动,要实现小车的在给定速度下运动,完成直线行驶,转向,加速,刹车等复杂运动. 使用的电机是12v供电的直流电机,带编码器反馈,这样就可以采用闭环速度控制, ...

  10. JVM:垃圾收集器与对象的"存活"问题

    垃圾收集器垃圾收集(Garbage Collection,GC).当需要排查各种内存溢出.内存泄露问题时,当垃圾收集成为系统更高并发量的瓶颈时,我们需要去了解GC和内存分配. 检查对象的"存 ...