目錄
手把手教你學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
中繼資料
為了調用輸出綁定:
- 使用 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:
,賬号密碼為admin,檢視rabbitmq已經正常運作http://localhost:15672/
手把手教你學Dapr - 8. 綁定
.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
驗證服務端綁定配置是否成功
http://localhost:15672/#/queues
,賬号密碼為admin,檢視是否已經建立一個名為
queue1
的隊列,如下圖所示:
建立Assignment.Client
控制台
Dapr.Actors
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-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),備注來意,邀請進群