乐趣区

关于c#:手把手教你学Dapr-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
  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/v1alpha1
    kind: Component
    metadata:
      name: myevent
      namespace: default
    spec:
      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),备注来意,邀请进群

退出移动版