Dapr 項目應用探索
背景介紹
前面文章對 Dapr 的基本信息進行了學習,接下來嘗試將 Dapr 應用相關應用中。
接下來一步步實現應用 dapr 功能。
一、預期效果
如上圖應用 Dapr 點包含:
a) 報表服務綁定統一數據源服務:接受更新通知
b) 業務系統調用報表操作: 採用 Dapr 方式
二、Dapr 應用:
- **綁定統一數據源:**更新通知:
a) dapr 創建綁定處理組件:(http 調用接口 -> 放到 .dapr\components 目錄)
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: uds
spec:
type: bindings.http
version: v1
metadata:
- name: url
value: http://127.0.0.1:8230/BindingInvoke/InvkeBind
在 Dashboard 中查看添加的組件:
b) 在統一數據源中數據變化時,調用執行 binding 方法:
//執行綁定:對應綁定的名稱:uds
_daprClient.InvokeBindingAsync<dynamic>("uds", "post", new { data = apps, type = refCache3 ? 3 : 1 });
c) 在報表服務中提供對應服務:
[Route("api/[controller]/")]
[ApiController]
public class BindingInvokeController : ControllerBase
{
[Route("InvkeBind")]
[HttpPost]
public IActionResult InvkeBind([FromBody] InvokeBindDto invokeBindDto)
{
Console.WriteLine(JsonConvert.SerializeObject(invokeBindDto));
return new JsonResult(invokeBindDto);
}
}
public class InvokeBindDto
{
public object data { get; set; }
public int type { get; set; }
}
- **業務系統:**服務調用:
a) 引用 Nuget 包:Dapr.Client
//Dapr.Client 直接創建
Install-Package Dapr.Client
//Dapr.AspNetCore 依賴注入
Install-Package Dapr.AspNetCore
b) 創建 DaprClient 對象:
- 注入方式:
//Startup
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers().AddDapr();
//……
}
//依賴注入:DaprClient
private readonly ILogger<BindingController> _logger;
private readonly DaprClient _daprClient;
public BindingController(ILogger<BindingController> logger, DaprClient daprClient)
{
_logger = logger;
_daprClient = daprClient;
}
- 創建方式:
Dapr.Client.DaprClientBuilder daprClientBuilder = new Dapr.Client.DaprClientBuilder();
var daprClient = daprClientBuilder.Build();
c) 調用報表服務接口:
Dapr.Client.DaprClientBuilder daprClientBuilder = new Dapr.Client.DaprClientBuilder();
var daprClient = daprClientBuilder.Build();
var obj = daprClient.InvokeMethodAsync<dynamic>(HttpMethod.Get, "rpts", "api/Run/GetRptParametersByRptId").Result;
Console.WriteLine("Dapr調用報表服務(GET)結果:" + System.Text.Json.JsonSerializer.Serialize(obj));
//Post
dynamic data = new
{
rptId = "c34f45f5-e075-9559-44dc-915886c4bde5",
rptPars = new { },
rptStaticPars = new { 人員姓名 = "admin", 人員編碼 = "admin" },
logLevel = 0
};
var task = daprClient.InvokeMethodAsync<dynamic, dynamic>(HttpMethod.Post, "rpts", "api/Run/ExecDynamicRptByRptId", data);
obj = task.Result;
Console.WriteLine("Dapr調用報表服務(POST)結果:" + System.Text.Json.JsonSerializer.Serialize(obj));
三、效果:
1、啓動 dapr 服務:
//啓動統一數據源:
dapr run --app-id uds --app-port 8220 --dapr-http-port 3500 dotnet UDS.Host.dll
//啓動報表服務
dapr run --app-id rpts --app-port 8230 --dapr-http-port 3501 dotnet ZLRPTS.Web.Host.dll
2、業務系統調用服務成功:
模擬運行業務系統:
3、統一數據源應用修改後報表服務同步更新:
a) 在 UDS 中修改數據:
b) 在報表服務中,得到 binding 響應數據
4、查看 zipkin 調用記錄
四、總結
本次已初步把 dapr 相關綁定、服務調用應用到了項目中;接下來進一步對祕鑰存儲進一步應用。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/NlQ3o7Nz_xEIIr2Bubdpng