手把手教你学Dapr - 8. 绑定
目录
手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序
介绍
使用绑定,您可以使用来自外部系统的事件触发您的应用程序,或与外部系统交互。这个构建块为您和您的代码提供了几个好处:
- 消除连接和轮询消息系统(如队列和消息总线)的复杂性
- 关注业务逻辑,而不是如何与系统交互的实现细节
- 让您的代码不受 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/dapr-study-room
我们正在行动,新的框架、新的生态
我们的目标是自由的
、易用的
、可塑性强的
、功能丰富的
、健壮的
。
所以我们借鉴Building blocks的设计理念,正在做一个新的框架MASA Framework
,它有哪些特点呢?
- 原生支持Dapr,且允许将Dapr替换成传统通信方式
- 架构不限,单体应用、SOA、微服务都支持
- 支持.Net原生框架,降低学习负担,除特定领域必须引入的概念,坚持不造新轮子
- 丰富的生态支持,除了框架以外还有组件库、权限中心、配置中心、故障排查中心、报警中心等一系列产品
- 核心代码库的单元测试覆盖率90%+
- 开源、免费、社区驱动
- 还有什么?我们在等你,一起来讨论
经过几个月的生产项目实践,已完成POC,目前正在把之前的积累重构到新的开源项目中
目前源码已开始同步到Github(文档站点在规划中,会慢慢完善起来):
QQ群:7424099
微信群:加技术运营微信(MasaStackTechOps),备注来意,邀请进群
手把手教你学Dapr - 8. 绑定的更多相关文章
- 手把手教你学Dapr - 9. 可观测性
目录 手把手教你学Dapr - 1. .Net开发者的大时代 手把手教你学Dapr - 2. 必须知道的概念 手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序 手把手教你学Dapr ...
- 手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序
上一篇:手把手教你学Dapr - 2. 必须知道的概念 注意: 文章中提到的命令行工具即是Windows Terminal/PowerShell/cmd其中的一个,推荐使用Windows Termin ...
- 手把手教你学Dapr - 4. 服务调用
上一篇:手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序 介绍 通过使用服务调用,您的应用程序可以使用标准的gRPC或HTTP协议与其他应用程序可靠.安全地通信. 为什么不直接用Ht ...
- 手把手教你学Dapr - 5. 状态管理
上一篇:手把手教你学Dapr - 4. 服务调用 介绍 使用状态管理,您的应用程序可以将数据作为键/值对存储在支持的状态存储中. 您的应用程序可以使用 Dapr 的状态管理 API 使用状态存储组件来 ...
- 手把手教你学Dapr - 6. 发布订阅
上一篇:手把手教你学Dapr - 5. 状态管理 介绍 发布/订阅模式允许微服务使用消息相互通信.生产者或发布者在不知道哪个应用程序将接收它们的情况下向主题发送消息.这涉及将它们写入输入通道.同样,消 ...
- 手把手教你学Dapr - 7. Actors
上一篇:手把手教你学Dapr - 6. 发布订阅 介绍 Actor模式将Actor描述为最低级别的"计算单元".换句话说,您在一个独立的单元(称为actor)中编写代码,该单元接收 ...
- 手把手教你学Dapr - 1. .Net开发者的大时代
Dapr全称 Distributed Application Runtime,分布式应用运行时 Dapr的口号 简化云原生应用开发,聚焦在应用的核心逻辑,让代码简单.可移植 Dapr的目标 最佳实践的 ...
- 手把手教你学Dapr - 2. 必须知道的概念
Sidecar 边车 Dapr API提供Http和gRPC两种通讯方式. 运行方式则可以是容器也可以是进程(Windows开发推荐使用Self Hosted,后续会解释). 这样的好处是与运行环境无 ...
- 30分钟手把手教你学webpack实战
30分钟手把手教你学webpack实战 阅读目录 一:什么是webpack? 他有什么优点? 二:如何安装和配置 三:理解webpack加载器 四:理解less-loader加载器的使用 五:理解ba ...
随机推荐
- Git 管理工具 基本用法
git管理工具基本操作命令: 1. 提交 git push origin dev 2.拉取分支: git pull 3.创建并转换分支: git switch -c dev; 4.直接切换到已有分支: ...
- Spring Cloud Gateway 动态修改请求参数解决 # URL 编码错误传参问题
Spring Cloud Gateway 动态修改请求参数解决 # URL 编码错误传参问题 继实现动态修改请求 Body 以及重试带 Body 的请求之后,我们又遇到了一个小问题.最近很多接口,收到 ...
- Network Analyst Tools(Network Analyst 工具)
Network Analyst 工具 1.分析 # Process: 创建 OD 成本矩阵图层 arcpy.MakeODCostMatrixLayer_na("", "O ...
- 关于web项目中的资源跳转
1.跳转包括两种方式: 转发 forward 重定向 redirect 2.两种方式的代码: AServlet类: //向request范围中存储数据 request.setAttribute(&qu ...
- 题解「雅礼集训 2017 Day7」事情的相似度
题目传送门 Description 给出一个长度为 \(n\) 的 \(01\) 串为 \(s\),设 \(t_i\) 为 \(s_{1,2,..,i}\),有 \(m\) 次查询,每次查询给出 \( ...
- Oracle中常用的to_char用法详解
Oracle函数to_char转化数字型指定小数点位数的用法 to_char,函数功能,就是将数值型或者日期型转化为字符型. 比如最简单的应用: -- 1.0123=>1.0123 SELECT ...
- python中dump与dumps实现序列化
前言 使用中如果我们想把python可识别对象的dict类型的数据通过str类型写入文件或者存入变量中就需要用到dump与dumps 详解 dump 1.新建个dict文件,然后将dict文件存入一个 ...
- netty系列之:让TLS支持http2
目录 简介 TLS的扩展协议NPN和ALPN SslProvider ApplicationProtocolConfig 构建SslContext ProtocolNegotiationHandler ...
- 初始CSS01
CSS基础知识 CSS介绍 CSS全称为层叠样式表,与HTML相辅相成,实现网页的排版布局与样式美化. 使用方式 根据样式表在页面中呈现的方式不同,可以通过以下三种方式在页面中使用格式 内联样式 改样 ...
- 前端HTML元素的类型名称
<div id="content" class="para" style="width:800px;"> <p>He ...