1         状态管理服务器端接口

1.1         添加Dapr.AspNetCore包

在DaprTest1.Server项目中添加Dapr.AspNetCore包,该包实现了ASP.NET Core与Dapr的集成,例如自动依赖注入DaprClient对象,将状态管理功能直接集成到 ASP.NET Core 模型绑定功能中等。

修改DaprTest1.Server项目的Startup.cs文件,将Dapr对象依赖注入到ASP.NET Core。

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3.  
  4. services.AddControllersWithViews().AddDapr();
  5. services.AddRazorPages();
  6. services.AddScoped<InvocationHandler>();
  7.  
  8. // 注入httpClient
  9. services.AddHttpClient("HttpClient").AddHttpMessageHandler<InvocationHandler>()
  10. .AddTypedClient(client =>
  11. {
  12. client.BaseAddress = new Uri("http://serviceapi1");
  13. return RestService.For<ICallServiceApi1>(client);
  14. });
  15. }

在DaprTest1.Server项目的WeatherForecastController.cs文件中注入DaprClient对象

  1. private readonly DaprClient _daprClient;
  2.  
  3. public WeatherForecastController(ILogger<WeatherForecastController> logger, ICallServiceApi1 callServiceApi1, DaprClient daprClient)
  4. {
  5. _logger = logger;
  6. _callServiceApi1 = callServiceApi1;
  7. _daprClient = daprClient;
  8. }

1.2         状态保存接口

在DaprTest1.Server项目的WeatherForecastController.cs文件中增加状态保存接口。

  1. [HttpPost(nameof(SaveStateValue))]
  2. public async Task SaveStateValue(StateModel stateModel)
  3. {
  4. await _daprClient.SaveStateAsync("statestore", stateModel.Key, stateModel.Value);
  5. }

其中 StateModel  为自定义的状态模型对象。

1.3         状态删除接口

在DaprTest1.Server项目的WeatherForecastController.cs文件中增加状态删除接口。

  1. [HttpDelete(nameof(DeleteStateValue) + "/{stateKey}")]
  2. public async Task DeleteStateValue(string stateKey)
  3. {
  4. await _daprClient.DeleteStateAsync("statestore", stateKey);
  5. }

1.4         状态获取接口

在DaprTest1.Server项目的WeatherForecastController.cs文件中增加两个状态获取接口。

  1. [HttpGet("GetStateValue/{stateKey}")]
  2. public async Task<string> GetStateValue(string stateKey)
  3. {
  4. return await _daprClient.GetStateAsync<string>("statestore", stateKey);
  5. }
  6.  
  7. [HttpGet(nameof(GetStateValueFromState) + "/{stateKey}")]
  8. public async Task<string> GetStateValueFromState([FromState("statestore", "stateKey")] StateEntry<string> stateEntry)
  9. {
  10. return await Task.FromResult(stateEntry.Value);
  11. }

注意,第二个状态获取接口是通过ASP.NET Core 模型绑定实现的。

2         状态管理菜单和页面

在DaprTest1.Server项目的NavMenu.razor文件新增状态管理菜单。

  1. <li class="nav-item px-3">
  2. <NavLink class="nav-link" href="statemanage">
  3. <span class="oi oi-list-rich" aria-hidden="true"></span> 状态管理
  4. </NavLink>
  5. </li>

在DaprTest1.Server项目新增状态管理页面

  1. @page "/statemanage"
  2. @using DaprTest1.Shared
  3. @using System.Text.Json
  4. @inject HttpClient Http
  5.  
  6. <h1>状态存储</h1>
  7.  
  8. <p>This component demonstrates storing state.</p>
  9.  
  10. <p>状态键: TestStateKey, 状态值:<input type="text" @bind="stateModel.Value" /></p>
  11.  
  12. <button class="btn btn-primary" @onclick="SaveStateValue">保存状态</button>
  13. <button class="btn btn-primary" @onclick="DeleteStateValue">删除状态</button>
  14. <button class="btn btn-primary" @onclick="GetStateValue">获取状态</button>
  15. <button class="btn btn-primary" @onclick="GetStateValueFromState">获取状态[FromState]</button>
  16.  
  17. <p>获取到的状态值: @stateValue</p>
  18.  
  19. @code {
  20. private StateModel stateModel = new StateModel() { Key = "TestStateKey" };
  21. private string stateValue = "";
  22.  
  23. private async Task SaveStateValue()
  24. {
  25. await Http.PostAsJsonAsync<StateModel>("WeatherForecast/SaveStateValue", stateModel);
  26. }
  27. private async Task DeleteStateValue()
  28. {
  29. await Http.DeleteAsync("WeatherForecast/DeleteStateValue/" + stateModel.Key);
  30. }
  31. private async Task GetStateValue()
  32. {
  33. stateValue = await Http.GetStringAsync("WeatherForecast/GetStateValue/" + stateModel.Key);
  34. }
  35. private async Task GetStateValueFromState()
  36. {
  37. stateValue = await Http.GetStringAsync("WeatherForecast/GetStateValueFromState/" + stateModel.Key);
  38. }
  39. }

3         状态管理测试

和上一节一样,我们先开启每个微服务的SideCar,然后启动两个微服务,访问状态管理页面:

相关代码:iamxiaozhuang/dapr-test (github.com)

Blazor+Dapr+K8s微服务之状态管理的更多相关文章

  1. Blazor+Dapr+K8s微服务之开发环境调试

    1         安装Dapr开发调试环境 1.1         Dapr 完整安装模式不支持开发调试 在上一篇随笔<Blazor+Dapr+K8s微服务之服务调用>中,我们通过为每个 ...

  2. Blazor+Dapr+K8s微服务之服务调用

    1.1         Dapr环境配置 1.1.1        在开发机安装Docker Desktop并启用Kubernetes 安装过程略,安装好后效果如下:(左下角两个绿色指示Docker和 ...

  3. Blazor+Dapr+K8s微服务之事件发布订阅

    我们要实现的是:在blazorweb服务中发布一个事件,并传递事件参数,然后在serviceapi1服务中订阅该事件,接收到blazorweb服务中发布的事件和参数. 1         在blazo ...

  4. Blazor+Dapr+K8s微服务之基于WSL安装K8s集群并部署微服务

         前面文章已经演示过,将我们的示例微服务程序DaprTest1部署到k8s上并运行.当时用的k8s是Docker for desktop 自带的k8s,只要在Docker for deskto ...

  5. 【性能测试实战】jmeter + k8s + 微服务 + skywalking + efk,测试都在学的热门技术

    原文持续更新完善:https://www.cnblogs.com/uncleyong/p/15475614.html 前言:当前的热门主流技术是哪些?测开为啥那么火?90%以上的测试对测开认识不准确 ...

  6. 【性能测试实战:jmeter+k8s+微服务+skywalking+efk】系列之:性能测试场景设计

    说明: 本文是基于虚拟机环境配置设计的 性能测试需求 总tps≥100 每个业务的rt<500ms 持续稳定跑50万业务量 单场景 目的:找到单场景的性能问题,为容量场景提供参考,如果低于容量场 ...

  7. 【性能测试实战:jmeter+k8s+微服务+skywalking+efk】系列之:性能监控、分析、调优等

    说明: 本文是基于虚拟机演示的,资源有限 skywalking中拓扑图 kubectl get po -A -owide 测试执行:单场景 查询礼品 jmeter -n -t gift.jmx -l ...

  8. 从零开始,使用Dapr简化微服务

    序言 现有的微服务模式需要再业务代码中集成大量基础设施模块,比如注册中心,服务发现,服务调用链路追踪,请求熔断,重试限流等等,使得系统过于臃肿重量级. Dapr作为新一代微服务模式,使用sidecar ...

  9. Dapr实战(三)状态管理

    状态管理解决了什么 分布式应用程序中的状态可能很有挑战性. 例如: 应用程序可能需要不同类型的数据存储. 访问和更新数据可能需要不同的一致性级别. 多个用户可以同时更新数据,这需要解决冲突. 服务必须 ...

随机推荐

  1. 你知道购买车票的原理吗?Java 线程同步

    先看再点赞,给自己一点思考的时间,如果对自己有帮助,微信搜索[程序职场]关注这个执着的职场程序员.我有什么:职场规划指导,技能提升方法,讲不完的职场故事,个人成长经验. 大周末的还是6点起床,起床的第 ...

  2. docker挂载数据卷

    1.Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷,简单的理解就是将数据持久化的工具. 2.在使用docker容器的时候,会产生一系列的数据文件,这些数据文件在我们 ...

  3. varnish配置语言(2)

    目录 1. Backend servers 2. 多个后端 3. Varnish 中的后端服务器和虚拟主机 4. 调度器 5. 健康检查 6. Hashing 7. 优雅模式 Grace mode 和 ...

  4. Vmware 恢复flat.vmdk和delta.vmdk

    背景: 一次客户现场突然掉电,导致虚拟机文件夹里面的文件丢失,只剩余-flat.vmdk和-delta.vmdk文件,其他文件全部丢失,文件格式原本为"文件"格式.新建虚拟机无法直 ...

  5. Linux_NTP

    服务器端配置 允许这些IP向自己同步时间 restrict x.x.x.x mask x.x.x.x nomodiy notrap 当前定义的所有server服务器无法同步后,和自身同步 server ...

  6. 4.Java基础

    为了项目方便管理,创建空项目 一.注释 平时编写代码,在代码量比较少的时候,还可以看懂自己写的,但是当项目结构一复杂起来,我们就需要用到注释了 注释并不会被执行,是给写代码的人看的 书写注释是一个非常 ...

  7. C语言:渔夫打鱼晒网问题

    //如果一个渔夫从 2011 年 1 月 1 日开始三天打渔,两天晒网,编程实现当输入 2011 1 月 1 日以后的任意一天,输出该渔夫是在打渔还是在晒网. #include <stdio.h ...

  8. [.NET大牛之路 003] .NET 的发展简史

    如果你热爱某产品,你一定想了解它的历史.今天我们简单回顾一下 .NET 平台的发展历史,来看看它在历史上的里程碑,这对我们更好地了解和学习 .NET 有着重要的意义. 微软 .NET 战略初衷 20 ...

  9. JAVA程序系统测试感受

    JAVA课程才刚刚开始,就仿佛经历了一场劫难,让我们叫苦连天,苦不堪言.暑假学的一些皮毛java知识,到了真正需要写一个相对完整的软件系统,就如同废材一样,实在是用不上来.我看着小民哥布置的考试内容, ...

  10. 如何掌握C#的核心技术

    如何掌握C#的核心技术 感谢网友毛大神制作的图. 引子 前不久看到一个段子,某年宁波交警引进人脸识别技术抓拍行人闯红灯,结果一天下来被发现闯红灯次数最多的是珠海女子董小姐,日闯红灯3000多次.宁波交 ...