背景介绍

 前面文章对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相关绑定、服务调用应用到了项目中;接下来进一步对秘钥存储进一步应用。

最新文章

  1. MySQL的一些知识。
  2. ghost xp 安装IIS,并配置WCF
  3. NHibernate系列文章三:简单的增删改查询
  4. C#调用MySql
  5. Java 分割文件 注意事项
  6. 10_Jaxws使用自定义pojo发布服务
  7. 【转】Android下编译jni库的二种方法(含示例) -- 不错
  8. 【百度地图API】交你如何用百度地图搜索自己的数据!不需数据库!
  9. Json-Server模拟数据接口开发
  10. 最强黑吃黑:WEBSHELL大马隐藏万能密码大全
  11. Codeforces Round #463 F. Escape Through Leaf (李超线段树合并)
  12. nginx中Geoip_module模块的使用
  13. 使用git命令创建分支到团队项目
  14. Linux之路,起步虽晚,迈步才会成功(2013.08.09)
  15. 转:【专题三】自定义Web服务器
  16. Windows下Apache服务器搭建
  17. 人脸识别 1:1 和1:n
  18. Android Service总结06 之AIDL
  19. 详解linux下的串口通讯开发
  20. Android之 广播

热门文章

  1. 决策单调性&amp;wqs二分
  2. 洛谷 P7718 -「EZEC-10」Equalization(差分转化+状压 dp)
  3. 51nod 1709 复杂度分析
  4. Linux生产应用常见习题汇总
  5. Swift-技巧(十) Protocol 的灵活使用
  6. Identity Server 4 从入门到落地(五)—— 使用Ajax访问Web Api
  7. nodejs-os模块
  8. Express中间件原理详解
  9. JmxTest
  10. Playing with Destructors in C++