背景介紹
前面文章對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相關繫結、服務呼叫應用到了專案中;接下來進一步對祕鑰儲存進一步應用。