目錄
手把手教你學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
-
安裝
rabbitmqdocker pull rabbitmq:3.8.25-management -
運行
rabbitmqdocker 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.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:http://localhost:15672/#/queues,賬號密碼為admin,查看是否已經創建一個名為queue1的佇列,如下圖所示:

創建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),備注來意,邀請進群

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/415156.html
標籤:C#
