• 注册
  • 后端开发博客 后端开发博客 关注:0 内容:3903

    手把手教你学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 或库的情况下接收事件
      • 在不更改代码的情况下替换绑定
      • 专注于业务逻辑而不是事件资源实现

      目前绑定支持40中组件,包括Aliyun、Azure、AWS等多家云服务厂商的产品,也包括常见的如Cron, kafka, MQTT, SMTP, Redis以及各种MQ等。

      以下图片是.Net Dapr官方教程里的一个示例

      手把手教你学Dapr – 8. 绑定
                                                
                                                    荐

      配置组件

      本篇文章将用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: 链接,账号密码为admin,查看rabbitmq已经正常运行

        手把手教你学Dapr – 8. 绑定
                                                
                                                    荐

      .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: 链接,账号密码为admin,查看是否已经创建一个名为queue1的队列,如下图所示:

      手把手教你学Dapr – 8. 绑定
                                                
                                                    荐

      创建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

      链接

      我们正在行动,新的框架、新的生态

      我们的目标是自由的易用的可塑性强的功能丰富的健壮的

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

      手把手教你学Dapr – 8. 绑定
                                                
                                                    荐

      请登录之后再进行评论

      登录

      手机阅读天地(APP)

      • 微信公众号
      • 微信小程序
      • 安卓APP
      手机浏览,惊喜多多
      匿名树洞,说我想说!
      问答悬赏,VIP可见!
      密码可见,回复可见!
      即时聊天、群聊互动!
      宠物孵化,赠送礼物!
      动态像框,专属头衔!
      挑战/抽奖,金币送不停!
      赶紧体会下,不会让你失望!
    • 实时动态
    • 签到
    • 做任务
    • 发表内容
    • 偏好设置
    • 到底部
    • 帖子间隔 侧栏位置: