Blazor+Dapr+K8s微服务之状态管理
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。
- public void ConfigureServices(IServiceCollection services)
- {
- services.AddControllersWithViews().AddDapr();
- services.AddRazorPages();
- services.AddScoped<InvocationHandler>();
- // 注入httpClient
- services.AddHttpClient("HttpClient").AddHttpMessageHandler<InvocationHandler>()
- .AddTypedClient(client =>
- {
- client.BaseAddress = new Uri("http://serviceapi1");
- return RestService.For<ICallServiceApi1>(client);
- });
- }
在DaprTest1.Server项目的WeatherForecastController.cs文件中注入DaprClient对象
- private readonly DaprClient _daprClient;
- public WeatherForecastController(ILogger<WeatherForecastController> logger, ICallServiceApi1 callServiceApi1, DaprClient daprClient)
- {
- _logger = logger;
- _callServiceApi1 = callServiceApi1;
- _daprClient = daprClient;
- }
1.2 状态保存接口
在DaprTest1.Server项目的WeatherForecastController.cs文件中增加状态保存接口。
- [HttpPost(nameof(SaveStateValue))]
- public async Task SaveStateValue(StateModel stateModel)
- {
- await _daprClient.SaveStateAsync("statestore", stateModel.Key, stateModel.Value);
- }
其中 StateModel 为自定义的状态模型对象。
1.3 状态删除接口
在DaprTest1.Server项目的WeatherForecastController.cs文件中增加状态删除接口。
- [HttpDelete(nameof(DeleteStateValue) + "/{stateKey}")]
- public async Task DeleteStateValue(string stateKey)
- {
- await _daprClient.DeleteStateAsync("statestore", stateKey);
- }
1.4 状态获取接口
在DaprTest1.Server项目的WeatherForecastController.cs文件中增加两个状态获取接口。
- [HttpGet("GetStateValue/{stateKey}")]
- public async Task<string> GetStateValue(string stateKey)
- {
- return await _daprClient.GetStateAsync<string>("statestore", stateKey);
- }
- [HttpGet(nameof(GetStateValueFromState) + "/{stateKey}")]
- public async Task<string> GetStateValueFromState([FromState("statestore", "stateKey")] StateEntry<string> stateEntry)
- {
- return await Task.FromResult(stateEntry.Value);
- }
注意,第二个状态获取接口是通过ASP.NET Core 模型绑定实现的。
2 状态管理菜单和页面
在DaprTest1.Server项目的NavMenu.razor文件新增状态管理菜单。
- <li class="nav-item px-3">
- <NavLink class="nav-link" href="statemanage">
- <span class="oi oi-list-rich" aria-hidden="true"></span> 状态管理
- </NavLink>
- </li>
在DaprTest1.Server项目新增状态管理页面
- @page "/statemanage"
- @using DaprTest1.Shared
- @using System.Text.Json
- @inject HttpClient Http
- <h1>状态存储</h1>
- <p>This component demonstrates storing state.</p>
- <p>状态键: TestStateKey, 状态值:<input type="text" @bind="stateModel.Value" /></p>
- <button class="btn btn-primary" @onclick="SaveStateValue">保存状态</button>
- <button class="btn btn-primary" @onclick="DeleteStateValue">删除状态</button>
- <button class="btn btn-primary" @onclick="GetStateValue">获取状态</button>
- <button class="btn btn-primary" @onclick="GetStateValueFromState">获取状态[FromState]</button>
- <p>获取到的状态值: @stateValue</p>
- @code {
- private StateModel stateModel = new StateModel() { Key = "TestStateKey" };
- private string stateValue = "";
- private async Task SaveStateValue()
- {
- await Http.PostAsJsonAsync<StateModel>("WeatherForecast/SaveStateValue", stateModel);
- }
- private async Task DeleteStateValue()
- {
- await Http.DeleteAsync("WeatherForecast/DeleteStateValue/" + stateModel.Key);
- }
- private async Task GetStateValue()
- {
- stateValue = await Http.GetStringAsync("WeatherForecast/GetStateValue/" + stateModel.Key);
- }
- private async Task GetStateValueFromState()
- {
- stateValue = await Http.GetStringAsync("WeatherForecast/GetStateValueFromState/" + stateModel.Key);
- }
- }
3 状态管理测试
和上一节一样,我们先开启每个微服务的SideCar,然后启动两个微服务,访问状态管理页面:
相关代码:iamxiaozhuang/dapr-test (github.com)
Blazor+Dapr+K8s微服务之状态管理的更多相关文章
- Blazor+Dapr+K8s微服务之开发环境调试
1 安装Dapr开发调试环境 1.1 Dapr 完整安装模式不支持开发调试 在上一篇随笔<Blazor+Dapr+K8s微服务之服务调用>中,我们通过为每个 ...
- Blazor+Dapr+K8s微服务之服务调用
1.1 Dapr环境配置 1.1.1 在开发机安装Docker Desktop并启用Kubernetes 安装过程略,安装好后效果如下:(左下角两个绿色指示Docker和 ...
- Blazor+Dapr+K8s微服务之事件发布订阅
我们要实现的是:在blazorweb服务中发布一个事件,并传递事件参数,然后在serviceapi1服务中订阅该事件,接收到blazorweb服务中发布的事件和参数. 1 在blazo ...
- Blazor+Dapr+K8s微服务之基于WSL安装K8s集群并部署微服务
前面文章已经演示过,将我们的示例微服务程序DaprTest1部署到k8s上并运行.当时用的k8s是Docker for desktop 自带的k8s,只要在Docker for deskto ...
- 【性能测试实战】jmeter + k8s + 微服务 + skywalking + efk,测试都在学的热门技术
原文持续更新完善:https://www.cnblogs.com/uncleyong/p/15475614.html 前言:当前的热门主流技术是哪些?测开为啥那么火?90%以上的测试对测开认识不准确 ...
- 【性能测试实战:jmeter+k8s+微服务+skywalking+efk】系列之:性能测试场景设计
说明: 本文是基于虚拟机环境配置设计的 性能测试需求 总tps≥100 每个业务的rt<500ms 持续稳定跑50万业务量 单场景 目的:找到单场景的性能问题,为容量场景提供参考,如果低于容量场 ...
- 【性能测试实战:jmeter+k8s+微服务+skywalking+efk】系列之:性能监控、分析、调优等
说明: 本文是基于虚拟机演示的,资源有限 skywalking中拓扑图 kubectl get po -A -owide 测试执行:单场景 查询礼品 jmeter -n -t gift.jmx -l ...
- 从零开始,使用Dapr简化微服务
序言 现有的微服务模式需要再业务代码中集成大量基础设施模块,比如注册中心,服务发现,服务调用链路追踪,请求熔断,重试限流等等,使得系统过于臃肿重量级. Dapr作为新一代微服务模式,使用sidecar ...
- Dapr实战(三)状态管理
状态管理解决了什么 分布式应用程序中的状态可能很有挑战性. 例如: 应用程序可能需要不同类型的数据存储. 访问和更新数据可能需要不同的一致性级别. 多个用户可以同时更新数据,这需要解决冲突. 服务必须 ...
随机推荐
- 你知道购买车票的原理吗?Java 线程同步
先看再点赞,给自己一点思考的时间,如果对自己有帮助,微信搜索[程序职场]关注这个执着的职场程序员.我有什么:职场规划指导,技能提升方法,讲不完的职场故事,个人成长经验. 大周末的还是6点起床,起床的第 ...
- docker挂载数据卷
1.Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷,简单的理解就是将数据持久化的工具. 2.在使用docker容器的时候,会产生一系列的数据文件,这些数据文件在我们 ...
- varnish配置语言(2)
目录 1. Backend servers 2. 多个后端 3. Varnish 中的后端服务器和虚拟主机 4. 调度器 5. 健康检查 6. Hashing 7. 优雅模式 Grace mode 和 ...
- Vmware 恢复flat.vmdk和delta.vmdk
背景: 一次客户现场突然掉电,导致虚拟机文件夹里面的文件丢失,只剩余-flat.vmdk和-delta.vmdk文件,其他文件全部丢失,文件格式原本为"文件"格式.新建虚拟机无法直 ...
- Linux_NTP
服务器端配置 允许这些IP向自己同步时间 restrict x.x.x.x mask x.x.x.x nomodiy notrap 当前定义的所有server服务器无法同步后,和自身同步 server ...
- 4.Java基础
为了项目方便管理,创建空项目 一.注释 平时编写代码,在代码量比较少的时候,还可以看懂自己写的,但是当项目结构一复杂起来,我们就需要用到注释了 注释并不会被执行,是给写代码的人看的 书写注释是一个非常 ...
- C语言:渔夫打鱼晒网问题
//如果一个渔夫从 2011 年 1 月 1 日开始三天打渔,两天晒网,编程实现当输入 2011 1 月 1 日以后的任意一天,输出该渔夫是在打渔还是在晒网. #include <stdio.h ...
- [.NET大牛之路 003] .NET 的发展简史
如果你热爱某产品,你一定想了解它的历史.今天我们简单回顾一下 .NET 平台的发展历史,来看看它在历史上的里程碑,这对我们更好地了解和学习 .NET 有着重要的意义. 微软 .NET 战略初衷 20 ...
- JAVA程序系统测试感受
JAVA课程才刚刚开始,就仿佛经历了一场劫难,让我们叫苦连天,苦不堪言.暑假学的一些皮毛java知识,到了真正需要写一个相对完整的软件系统,就如同废材一样,实在是用不上来.我看着小民哥布置的考试内容, ...
- 如何掌握C#的核心技术
如何掌握C#的核心技术 感谢网友毛大神制作的图. 引子 前不久看到一个段子,某年宁波交警引进人脸识别技术抓拍行人闯红灯,结果一天下来被发现闯红灯次数最多的是珠海女子董小姐,日闯红灯3000多次.宁波交 ...