目录

手把手教你学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

    1. docker pull rabbitmq:3.8.25-management
  2. 运行rabbitmq

    1. 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
  3. Windows打开目录%USERPROFILE%\.dapr\components,创建binding.yaml,内容如下

    1. apiVersion: dapr.io/v1alpha1
    2. kind: Component
    3. metadata:
    4. name: myevent
    5. namespace: default
    6. spec:
    7. type: bindings.rabbitmq
    8. version: v1
    9. metadata:
    10. - name: queueName
    11. value: queue1
    12. - name: host
    13. value: amqp://admin:admin@localhost:5672
    14. - name: durable
    15. value: true
    16. - name: deleteWhenUnused
    17. value: false
    18. - name: ttlInSeconds
    19. value: 60
    20. - name: prefetchCount
    21. value: 0
    22. - name: exclusive
    23. value: false
    24. - name: maxPriority
    25. value: 5
  4. 打开浏览器,输入url:http://localhost:15672/,账号密码为admin,查看rabbitmq已经正常运行

.Net调用Dapr的绑定

创建Assignment.Server

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

修改program.cs

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

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

  1. spec:
  2. type: binding.rabbitmq
  3. metadata:
  4. - name: route
  5. value: /onevent

运行Assignment.Server

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

  1. 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

  1. using Dapr.Client;
  2. var client = new DaprClientBuilder().Build();
  3. await client.InvokeBindingAsync("myevent", "create", "World");
  4. Console.WriteLine("Binding sent.");

运行Assignment.Client

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

  1. 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),备注来意,邀请进群

手把手教你学Dapr - 8. 绑定的更多相关文章

  1. 手把手教你学Dapr - 9. 可观测性

    目录 手把手教你学Dapr - 1. .Net开发者的大时代 手把手教你学Dapr - 2. 必须知道的概念 手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序 手把手教你学Dapr ...

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

    上一篇:手把手教你学Dapr - 2. 必须知道的概念 注意: 文章中提到的命令行工具即是Windows Terminal/PowerShell/cmd其中的一个,推荐使用Windows Termin ...

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

    上一篇:手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序 介绍 通过使用服务调用,您的应用程序可以使用标准的gRPC或HTTP协议与其他应用程序可靠.安全地通信. 为什么不直接用Ht ...

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

    上一篇:手把手教你学Dapr - 4. 服务调用 介绍 使用状态管理,您的应用程序可以将数据作为键/值对存储在支持的状态存储中. 您的应用程序可以使用 Dapr 的状态管理 API 使用状态存储组件来 ...

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

    上一篇:手把手教你学Dapr - 5. 状态管理 介绍 发布/订阅模式允许微服务使用消息相互通信.生产者或发布者在不知道哪个应用程序将接收它们的情况下向主题发送消息.这涉及将它们写入输入通道.同样,消 ...

  6. 手把手教你学Dapr - 7. Actors

    上一篇:手把手教你学Dapr - 6. 发布订阅 介绍 Actor模式将Actor描述为最低级别的"计算单元".换句话说,您在一个独立的单元(称为actor)中编写代码,该单元接收 ...

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

    Dapr全称 Distributed Application Runtime,分布式应用运行时 Dapr的口号 简化云原生应用开发,聚焦在应用的核心逻辑,让代码简单.可移植 Dapr的目标 最佳实践的 ...

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

    Sidecar 边车 Dapr API提供Http和gRPC两种通讯方式. 运行方式则可以是容器也可以是进程(Windows开发推荐使用Self Hosted,后续会解释). 这样的好处是与运行环境无 ...

  9. 30分钟手把手教你学webpack实战

    30分钟手把手教你学webpack实战 阅读目录 一:什么是webpack? 他有什么优点? 二:如何安装和配置 三:理解webpack加载器 四:理解less-loader加载器的使用 五:理解ba ...

随机推荐

  1. Serverless 对研发效能的变革和创新

    作者 | 杨皓然(不瞋) 对企业而言,Serverless 架构有着巨大的应用潜力.随着云产品的完善,产品的集成和被集成能力的加强,软件交付流程自动化能力的提高,我们相信在 Serverless 架构 ...

  2. 题解 51nod 1597 有限背包计数问题

    题目传送门 题目大意 给出 \(n\),第 \(i\) 个数有 \(i\) 个,问凑出 \(n\) 的方案数. \(n\le 10^5\) 思路 呜呜呜,傻掉了... 首先想到根号分治,分别考虑 \( ...

  3. Windows 10下CUDA及cuDNN的安装 —— Pytorch

    Windows 10下CUDA及cuDNN的安装 CUDA简介与下载地址 CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运算平台. CU ...

  4. GAN实战笔记——第二章自编码器生成模型入门

    自编码器生成模型入门 之所以讲解本章内容,原因有三. 生成模型对大多数人来说是一个全新的领域.大多数人一开始接触到的往往都是机器学习中的分类任务--也许因为它们更为直观:而生成模型试图生成看起来很逼真 ...

  5. 网页常用的css特效让互动留住客户

    一般网站如果制作按钮,多做一些互动,可以让客户获得更好的体验. 例如鼠标滑过按钮,让背景颜色从左往右滑出来(或者从右往左都可以): <a target="_blank" hr ...

  6. 2021能源PWN wp

    babyshellcode 这题考无write泄露,write被沙盒禁用时,可以考虑延时盲注的方式获得flag,此exp可作为此类型题目模版,只需要修改部分参数即可,详细见注释 from pwn im ...

  7. 【UE4】GAMES101 图形学作业2:光栅化和深度缓存

    总览 在上次作业中,虽然我们在屏幕上画出一个线框三角形,但这看起来并不是那么的有趣.所以这一次我们继续推进一步--在屏幕上画出一个实心三角形,换言之,栅格化一个三角形.上一次作业中,在视口变化之后,我 ...

  8. LCP 07.传递消息

    题目 小朋友 A 在和 ta 的小伙伴们玩传信息游戏,游戏规则如下: 有 n 名玩家,所有玩家编号分别为 0 - n-1,其中小朋友 A 的编号为 0 每个玩家都有固定的若干个可传信息的其他玩家(也可 ...

  9. LeetCode:链表专题

    链表专题 参考了力扣加加对与链表专题的讲解,刷了些 leetcode 题,在此做一些记录,不然没几天就没印象了 出处:力扣加加-链表专题 总结 leetcode 中对于链表的定义 // 定义方式1: ...

  10. Java:创建对象小记

    Java:创建对象小记 对 Java 中的创建对象的内容,做一个微不足道的小小小小记 创建对象的方式概述 使用 new 关键字:Person person = new Person(); 反射创建:使 ...