目录

手把手教你学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
  2. 运行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
  3. 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
  4. 关上浏览器,输出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/dap...

咱们正在口头,新的框架、新的生态

咱们的指标是自在的易用的可塑性强的功能丰富的强壮的

所以咱们借鉴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),备注来意,邀请进群