写点什么

手把手教你学 Dapr - 8. 绑定

  • 2022 年 1 月 19 日
  • 本文字数:2411 字

    阅读完需:约 8 分钟

目录

手把手教你学Dapr - 1. .Net开发者的大时代

手把手教你学Dapr - 2. 必须知道的概念

手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序

手把手教你学Dapr - 4. 服务调用

手把手教你学Dapr - 5. 状态管理

手把手教你学Dapr - 6. 发布订阅

手把手教你学Dapr - 7. Actors

手把手教你学Dapr - 8. 绑定


介绍

使用绑定,您可以使用来自外部系统的事件触发您的应用程序,或与外部系统交互。这个构建块为您和您的代码提供了几个好处:

  • 消除连接和轮询消息系统(如队列和消息总线)的复杂性

  • 关注业务逻辑,而不是如何与系统交互的实现细节

  • 让您的代码不受 SDK 或库的影响

  • 处理重试和故障恢复

  • 运行时在绑定之间切换

  • 构建可移植的应用程序,其中设置了特定于环境的绑定,不需要更改代码


输入绑定

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

为了从输入绑定接收事件:

  1. 定义描述绑定类型及其元数据(连接信息等)的组件 YAML

  2. 侦听传入事件的 HTTP 端点,或使用 gRPC proto 库获取传入事件


输出绑定

输出绑定允许您调用外部资源。可选的payload元数据可以与请求一起发送。

为了调用输出绑定:

  1. 定义描述绑定类型及其元数据(连接信息等)的组件 YAML

  2. 使用 HTTP 或 gRPC 方法调用具有可选payload的绑定


使用场景

使用绑定,你的代码可以被来自不同资源的传入事件触发,这些资源可以是任何东西:队列、消息传递管道、云服务、文件系统等。

这对于事件驱动处理、数据管道或只是对事件做出一般反应并进行进一步处理是理想的。

Dapr 绑定允许您:

  • 在不包含特定 SDK 或库的情况下接收事件

  • 在不更改代码的情况下替换绑定

  • 专注于业务逻辑而不是事件资源实现

目前 Dapr 还不支持跨 Dapr 互调用,而yaron给出的解决方案之一就是绑定


目前绑定支持 40 中组件,包括 Aliyun、Azure、AWS 等多家云服务厂商的产品,也包括常见的如Cron, kafka, MQTT, SMTP, Redis以及各种 MQ 等。

以下图片是.Net Dapr 官方教程里的一个示例


配置组件

本篇文章将用rabbitmq来演示(为什么不用 redis,因为 redis 翻车了,只支持 output,没注意看 supported),如前几篇文章所说,先配置 yaml

  1. 安装rabbitmq

docker pull rabbitmq:3.8.25-management
复制代码


  1. 运行rabbitmq

docker run -d --hostname rabbitMQ --name my-rabbitMQ -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin rabbitmq:3.8.25-management
复制代码
  1. Windows 打开目录%USERPROFILE%\.dapr\components,创建binding.yaml,内容如下

apiVersion: dapr.io/v1alpha1kind: Componentmetadata:  name: myevent  namespace: defaultspec:  type: bindings.rabbitmq  version: v1  metadata:  - name: queueName    value: queue1  - name: host    value: amqp://admin:admin@localhost:5672  - name: durable    value: true  - name: deleteWhenUnused    value: false  - name: ttlInSeconds    value: 60  - name: prefetchCount    value: 0  - name: exclusive    value: false  - name: maxPriority    value: 5
复制代码
  1. 打开浏览器,输入 url:http://localhost:15672/,账号密码为 admin,查看 rabbitmq 已经正常运行


.Net 调用 Dapr 的绑定

创建 Assignment.Server

创建类库项目,并添加Dapr.Actors.AspNetCoreNuGet 包引用和Assignment.Shared项目引用,最后修改程序端口为 5000。

修改 program.cs

var builder = WebApplication.CreateBuilder(args);var app = builder.Build();app.MapPost("/myevent", ([Microsoft.AspNetCore.Mvc.FromBody] string word) => Console.WriteLine($"Hello {word}!"));app.Run();
复制代码

:一定要用POST Method,参数记得在 Body 里面。默认 Url 与 bindings 的 name 对应。能改路由吗?当然能,看下面配置

spec:  type: binding.rabbitmq  metadata:  - name: route    value: /onevent
复制代码


运行 Assignment.Server

使用 Dapr CLI 来启动,先使用命令行工具跳转到目录 dapr-study-room\Assignment07\Assignment.Server,然后执行下面命令

dapr run --app-id testbinding --app-port 5000 --dapr-http-port 3500 --dapr-grpc-port 50001 dotnet run
复制代码


验证服务端绑定配置是否成功

打开浏览器,输入 url:http://localhost:15672/#/queues,账号密码为 admin,查看是否已经创建一个名为queue1的队列,如下图所示:


创建 Assignment.Client

创建控制台项目,并添加Dapr.ActorsNuGet 包引用和Assignment.Shared项目引用。

修改 Program.cs

using Dapr.Client;var client = new DaprClientBuilder().Build();await client.InvokeBindingAsync("myevent", "create", "World");Console.WriteLine("Binding sent.");
复制代码


运行 Assignment.Client

使用 Dapr CLI 来启动,先使用命令行工具跳转到目录 dapr-study-room\Assignment07\Assignment.Client,然后执行下面命令

dotnet run
复制代码


本章源码

Assignment08

https://github.com/doddgu/dapr-study-room


我们正在行动,新的框架、新的生态

我们的目标是自由的易用的可塑性强的功能丰富的健壮的

所以我们借鉴 Building blocks 的设计理念,正在做一个新的框架MASA Framework,它有哪些特点呢?

  • 原生支持 Dapr,且允许将 Dapr 替换成传统通信方式

  • 架构不限,单体应用、SOA、微服务都支持

  • 支持.Net 原生框架,降低学习负担,除特定领域必须引入的概念,坚持不造新轮子

  • 丰富的生态支持,除了框架以外还有组件库、权限中心、配置中心、故障排查中心、报警中心等一系列产品

  • 核心代码库的单元测试覆盖率 90%+

  • 开源、免费、社区驱动

  • 还有什么?我们在等你,一起来讨论

经过几个月的生产项目实践,已完成 POC,目前正在把之前的积累重构到新的开源项目中

目前源码已开始同步到 Github(文档站点在规划中,会慢慢完善起来):

MASA.BuildingBlocks

MASA.Contrib

MASA.Utils

MASA.EShop

BlazorComponent

MASA.Blazor

QQ 群:7424099

微信群:加技术运营微信(MasaStackTechOps),备注来意,邀请进群

MASA 技术团队:(鬼谷子)


发布于: 刚刚阅读数: 2
用户头像

还未添加个人签名 2021.10.26 加入

还未添加个人简介

评论

发布
暂无评论
手把手教你学Dapr - 8. 绑定