共计 3253 个字符,预计需要花费 9 分钟才能阅读完成。
目录
手把手教你学 Dapr – 1. .Net 开发者的大时代
手把手教你学 Dapr – 2. 必须晓得的概念
手把手教你学 Dapr – 3. 应用 Dapr 运行第一个.Net 程序
手把手教你学 Dapr – 4. 服务调用
手把手教你学 Dapr – 5. 状态治理
手把手教你学 Dapr – 6. 公布订阅
手把手教你学 Dapr – 7. Actors
手把手教你学 Dapr – 8. 绑定
介绍
应用绑定,您能够应用来自内部零碎的事件触发您的应用程序,或与内部零碎交互。这个构建块为您和您的代码提供了几个益处:
- 打消连贯和轮询音讯零碎(如队列和音讯总线)的复杂性
- 关注业务逻辑,而不是如何与零碎交互的实现细节
- 让您的代码不受 SDK 或库的影响
- 解决重试和故障复原
- 运行时在绑定之间切换
- 构建可移植的应用程序,其中设置了特定于环境的绑定,不须要更改代码
输出绑定
输出绑定用于在产生来自内部资源的事件时触发您的应用程序。可选的 payload
和元数据
能够与申请一起发送。
为了从输出绑定接管事件:
- 定义形容绑定类型及其元数据(连贯信息等)的组件 YAML
- 侦听传入事件的 HTTP 端点,或应用 gRPC proto 库获取传入事件
输入绑定
输入绑定容许您调用内部资源。可选的 payload
和元数据
能够与申请一起发送。
为了调用输入绑定:
- 定义形容绑定类型及其元数据(连贯信息等)的组件 YAML
- 应用 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
-
装置
rabbitmq
docker pull rabbitmq:3.8.25-management
-
运行
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
-
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
-
关上浏览器,输出 url:
http://localhost:15672/
,账号密码为 admin,查看 rabbitmq 曾经失常运行
.Net 调用 Dapr 的绑定
创立 Assignment.Server
创立 类库
我的项目,并增加 Dapr.Actors.AspNetCore
NuGet 包援用和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.Actors
NuGet 包援用和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),备注来意,邀请进群