手把手教你学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官方教程里的一个示例

76b8d3ca2832efd81a92506bc25dfcb3.png

配置组件

本篇文章将用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: myeventnamespace: default
    spec:type: bindings.rabbitmqversion: v1metadata:- name: queueNamevalue: queue1- name: hostvalue: amqp://admin:admin@localhost:5672- name: durablevalue: true- name: deleteWhenUnusedvalue: false- name: ttlInSecondsvalue: 60- name: prefetchCountvalue: 0- name: exclusivevalue: false- name: maxPriorityvalue: 5
  4. 打开浏览器,输入url:http://localhost:15672/,账号密码为admin,查看rabbitmq已经正常运行

  5. fa73e866cad090ce5f965ef9580a1469.png

.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.rabbitmqmetadata:- name: routevalue: /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的队列,如下图所示:

8fbb51af07d3d203d098d584c898c81a.png

创建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/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),备注来意,邀请进群

6d6afbdbe99ff3df1fe8a1624af753fb.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python win7 sp1_[ Python - 15 ] win7安装paramiko问题总汇

安装环境:win7 sp1 python3.5 安装paramiko新装的win7 sp1 x64位系统,安装好python3.5和pycharm后,需要用到paramiko模块于是开始安装:>>pip install paramiko报错:warning: GMP or MPIR library not found; Not…

Android之百度地图定位最详细使用总结

Android之百度定位 如果项目里面有定位功能的话,一般还是觉得蛮高大上的,我们项目用的百度定位,到网上找了很多资料,很多都不全面,很多博客都没有小伙伴期望得到当前的省和城市出来,然后自己动手也有很多错误,不知道错在哪里,也在网上找为什么…

CountDownLatch应用实战

2019独角兽企业重金招聘Python工程师标准>>> 1. CountDownLatch简介 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。其本质就是一个共享锁。 他最主要的作用是用来同步java的线程。 主要有以下三个方…

用JoyToKey使游戏手柄变键盘或鼠标

用JoyToKey使游戏手柄变键盘或鼠标 除了用手柄来玩游戏外,你有没有想过利用手柄做点别的什么事情呢?其实,只要结合一个非常小巧的游戏控制器增强软件JoyToKey,我们就能最大限度地挖掘手柄的潜力,用它来完成在以前看来“…

40张令人震惊的对比图,第一张细思恐极

全世界只有3.14 % 的人关注了爆炸吧知识世界之大,无奇不有。来看Reddit网友们分享的一组对比图,涨涨姿势!医生对戴口罩和不戴口罩的培养皿分别:打喷嚏,唱歌,说话和咳嗽之后的区别(难怪有些国家疫…

mysql查找最高分最低分_sql查询最高分、最低分和平均分语句

sql 查询最高分、最低分和平均分语句//我们要用就以学生成绩为实例吧/*结构学生表Student(S#,Sname,Sage,Ssex) --S# 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别--2.课程表Course(C#,Cname,T#) --C# --课程编号,Cname 课程名称,T# 教师编号*/查询各科成绩最高分、最…

Smark.Data 1.5更新详解

由于一直忙于Beetle的开发和优化,Smark.Data组件已经有很长一段时间更新。这段时间发现Smark.Data在某些情况下不足,而这些情况又比较普遍所以进行了1.5版的更新。其更新的主要功能包括:查询可填充到自定义对象中,可直接执行存储过程和执行存…

Sql 存储过程加游标结合的使用

创建一个存储过程使用游标 如果该职工入职时间超过3年 并且学历 在本科以上 则对该职工工资加10%如果 学历没达到本科的 入职时间在10年以上 同样对该职工工资追加8% 其他的一律不加 CREATE proc jiagongzi as declare name nvarchar(20) declare xueli nvarchar(20) declare…

C# 数据适配器之 DataAdapter 对象

01 DataAdapter 对象概述DataAdapter 对象是一个数据适配器对象,是DataSet 与数据源之间的桥梁。DataAdapter 对像提供了 4 个属性,用于实现与数据源之间的互通。SelectCommand 属性:向数据库发送查询 SQL 语句。 DeleteCommand 属性&#x…

express 4 简单实现自动注册路由功能

为什么80%的码农都做不了架构师?>>> ##实现 在express,模块的lib/router/index.js 的 proto.route 方法定义附件添加代码,实现自动注册路由方法: var fs require("fs"); var Path require("path&quo…

速战速决?你不会是不行吧......

1 真服了!!▼2 同猫不同命......▼3 无锡:??▼4 还是黄金好?▼5 你会不会是不行??▼6 爸爸:那也太惊喜了...▼7 倒是毫无违和感?▼8 皇上您说的对&…

mysql普通标转分区表_MySQL分区表到普通表互转

由于最近总有人抱怨,数据迁移后执行SQL变慢,经过查看原来是分区导致的问题。原分区根据按月设置RANGE分区,看到这图的时候也许有人就会发现问题.......业务查询SQL:从SQL上看 执行计划确实是走了分区,但为什么没有命中…

c++标准库中,含有链表的类list

Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢.STL中 end()指向的总是无效值,取值都用迭代器,用法跟指针差不多。assign() 给list赋值 back() 返回最后一个元素 begin() 返回指向第一个…

读懂路由表

教你读懂路由表源码:--------------------------------------------------------------------------------Active Routes: Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 192.16…

C# 用IrisSkin4.dll美化你的WinForm

1. 将IrisSkin4.dll动态文件导入当前项目引用中。具体操作为:解决方案资源管理器->当前项目->引用->右键->添加引用,找到IrisSkin4.dll文件,然后加入即可。建议,最好把IrisSkin4.dll文件放在当前项目\bin\Debug文件中…

SpringMVC中的文件上传

这是用的是SpringMVC-3.1.1、commons-fileupload-1.2.2和io-2.0.1 web.xml文件 <?xml version"1.0" encoding"UTF-8"?> <web-app version"2.5" xmlns"http://java.sun.com/xml/ns/javaee" xmlns:xsi"http://www.w3.o…

JavaScript对象、JSON对象、JSON字符串的区别

一、首先看下什么是JSON JSON&#xff1a;JavaScript Object Natation&#xff0c;JavaScript对象的表现形式&#xff0c;已经发展成一种轻量级的数据交换格式。 JavaScript对象的表现形式&#xff0c;指定义JS对象的一种方式。数据交换格式&#xff0c;即用于交换的数据格式。…

全球最大油田、金矿、煤矿、铁矿、铜矿,究竟哪个最值钱?

全世界只有3.14 % 的人关注了爆炸吧知识1世界上最大油田&#xff1a;沙特加瓦尔油田&#xff08;Ghawar Oil field&#xff09;加瓦尔油田位于沙特阿拉伯东部&#xff0c;首都利雅得以东约500km处&#xff0c;它探明的石油可采储量为114.8亿吨&#xff0c;天然气储量9240亿立方…

JavaScript自动设置IFrame高度(兼容各主流浏览器)

调用方式如下 <iframe id"ifm" name"ifm" οnlοad"SetIFrameHeight(ifm)" src"http://www.qq.com" /> function SetIFrameHeight(down) {var Sys {};var ua navigator.userAgent.toLowerCase();var s;(s ua.match(/msie ([\…

MVC3快速搭建Web应用(二)

easyui与mvc的结合 上一篇文章发布后&#xff0c;自己又仔细读了数遍&#xff0c;感觉一是文笔太差&#xff0c;二是描述逻辑比较混乱&#xff0c;客观原因是涉及到东西其实蛮多的&#xff0c;那三个步骤不可能在一篇短短的文章中就可以描述清楚。此篇笔者将尽量更加详尽一些。…