背景介绍

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

Dapr项目应用探索的更多相关文章

  1. Vue开源项目使用探索

    前言 本文记录一次使用Vue开源项目的过程. 寻找Vue开源项目 要使用Vue开源项目就必须先找到一个,我们去Github上搜索[后台],然后使用Vue分类进行检索,找到排名第一的开源框架进行下载—v ...

  2. Azure DevOps 中 Dapr项目自动部署流程实践

    注:本文中主要讨论 .NET6.0项目在 k8s 中运行的 Dapr 的持续集成流程, 但实际上不是Dapr的项目部署到K8s也是相同流程,只是k8s的yaml配置文件有所不同 流程选择 基于 Dap ...

  3. 在 Dapr 中使用 Cron 绑定的计划任务

    我昨天写了一篇关于在微服务应用程序中采用Dapr的好处的文章<从服务之间的调用来看 我们为什么需要Dapr>[1], 在那篇文章中,我们专注于"服务调用"构建块 [2] ...

  4. dapr学习:dapr介绍

    该部分主要是给出学习dapr的入门,描述dapr全貌告诉你dapr是啥以及介绍dapr的主要功能与组件 该部分分为两章: 第一章:介绍dapr 第二章:调试dapr的解决方案项目 1. 介绍dapr ...

  5. 敢为人先,从阿里巴巴云原生团队实践Dapr案例,看分布式应用运行时前景

    背景 Dapr是一个由微软主导的云原生开源项目,国内云计算巨头阿里云也积极参与其中,2019年10月首次发布,到今年2月正式发布V1.0版本.在不到一年半的时间内,github star数达到了1.2 ...

  6. 乘风破浪,.Net Core遇见Dapr,为云原生而生的分布式应用运行时

    Dapr是一个由微软主导的云原生开源项目,国内云计算巨头阿里云也积极参与其中,2019年10月首次发布,到今年2月正式发布V1.0版本.在不到一年半的时间内,github star数达到了1.2万,超 ...

  7. WinCE项目应用之RM905a+活度计远程检定方法研究

    前文<RM905a+医用放射性核素活度计>中已经提到,基于WinCE5.0系统的RM905a+可以很方便的实现远程界面显示和控制.所以远程检定的主要工作在于服务器端的业务部分.基于< ...

  8. myeclipse项目部署到idea常见问题

    由于myeclipse是付费产品,经过几次破解不成功后,遂弃之,转投IntelliJ IDEA门下.但这就出现一个问题了,以前用的eclipse.myeclipse以及spring tools sui ...

  9. ElasticSearch(九):springboot项目集成消息中间件activeMQ

    目的:为了将elasticsearch做成单独的服务,那么我们必须解耦,也就是业务逻辑和搜索模块是没有关系的,并且是异步的.那么项目之间通信,使用的选择有限,消息中间件是一个不错的选择. 消息中间件常 ...

随机推荐

  1. [R] 添加误差棒的分组折线图:geom_path: Each group consists of only one observation. Do you need to adjust the...

    想做一个简单的分组折线图,并添加误差棒,类似下面这样的: 用ggplot似乎很简单就能实现:ggplot+geom_errorbar+geom_line+geom_point,重点在于计算误差棒. 还 ...

  2. mGWAS研究思路

    mGWAS(metabolome-based genome-wide association studies)的研究方法和GWAS类似,只是将代谢物含量作为表型性状来与基因位点进行关联.但同时它也有自 ...

  3. grep -r

    今晚改脚本 我发现了一个很有趣的事情,一共56个配置文件 1 # 注意:对一些参数一致的多个文件可以用此方法 2 # grep -r 查找文件内容,其中PARALLEL=2就是我要替换的内容 3 4 ...

  4. linux下面升级 Python版本并修改yum属性信息

    最近需要在linux下使用python,故需要升级一下python版本,上网查询了一下相关资料,更新了一下linux下面的python环境,记录如下: linux下面升级 Python版本并修改yum ...

  5. 02 eclipse中配置Web项目(含eclipse基本配置和Tomcat的配置)

    eclipse搭建web项目 一.Eclipse基本配置 找到首选项: (一)配置编码 (二)配置字体 (三)配置jdk (四)配置Tomcat 二.Tomcat配置 三.切换视图,检查Tomcat ...

  6. js获取中国省市区,省市筛选、省市、省市筛选联动。【C#】【js】

    <style type="text/css"> .labelhide { -webkit-box-shadow: 0px 1px 0px 0px #f3f3f3 !im ...

  7. 基于python win32setpixel api 实现计算机图形学相关操作

    最近读研期间上了计算机可视化的课,老师也对计算机图形学的实现布置了相关的作业.虽然我没有系统地学过图形可视化的课,但是我之前逆向过一些游戏引擎,除了保护驱动之外,因为要做透视,接触过一些计算机图形学的 ...

  8. Spark(十三)【SparkSQL自定义UDF/UDAF函数】

    目录 一.UDF(一进一出) 二.UDAF(多近一出) spark2.X 实现方式 案例 ①继承UserDefinedAggregateFunction,实现其中的方法 ②创建函数对象,注册函数,在s ...

  9. Scala【需求二:求各省市的各个指标】

    需求处理步骤 原始数据->json->过滤->列裁剪 需求二:求各省市的各个指标 原始数据 文本pmt.json,每一行都是一个json字符串.里面包含ip等信息 {"se ...

  10. C++基本函数的调用优化(构造、拷贝构造、赋值)

    合理的函数可提升时间和空间的利用率 //Test1.h #include<iostream> using namespace std; struct ST { private: int a ...