新建webapi项目

  • 建项目时取消https支持,勾选docker支持,

  • Program.cs中注释下面语句,这样部署后才能访问Swagger
// Configure the HTTP request pipeline.
//if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
  • 添加Dapr.Client与Dapr.AspNetCore两个nuget包
  • 修改Program.cs文件,增加dapr sdk支持

  • 修改WeatherForecastController.cs文件
using Dapr;
using Dapr.Client;
using Microsoft.AspNetCore.Mvc; namespace backend.Controllers
{
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private readonly DaprClient _daprClient;
public WeatherForecastController(DaprClient daprClient)
{
_daprClient = daprClient;
} [HttpGet(Name = "GetWeatherForecast")]
public object Get()
{
return new { message = "Hello Dapr!" };
} [HttpPost(nameof(SaveStateValue))]
public async Task SaveStateValue(StateModel stateModel)
{
await _daprClient.SaveStateAsync("statestore", stateModel.Key, stateModel.Value);//statestore
}
[HttpDelete(nameof(DeleteStateValue) + "/{stateKey}")]
public async Task DeleteStateValue(string stateKey)
{
await _daprClient.DeleteStateAsync("statestore", stateKey);
}
[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);
}
}
}

增加文件StateModel.cs

namespace backend.Controllers
{
public class StateModel
{
public string Key { get; set; }
public string Value { get; set; }
}
}

部署到k8s

dapr init -k
kubectl apply -f redis.yaml
kubectl apply -f statestore.yaml
kubectl apply -f dapr-front.yaml
#redis.yaml 文件
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: redis
version: v1
name: redis
#namespace: dapr-test1
spec:
replicas: 1
selector:
matchLabels:
app: redis
strategy:
type: Recreate
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis:6-alpine
imagePullPolicy: IfNotPresent
ports:
- containerPort: 6379 --- apiVersion: v1
kind: Service
metadata:
labels:
app: redis
name: redis
#namespace: dapr-test1
spec:
type: NodePort
ports:
- name: "data"
port: 6379
targetPort: 6379
selector:
app: redis
# statestore.yaml 文件
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
#namespace: default #dapr-test1
spec:
type: state.redis
version: v1
metadata:
- name: redisHost
value: redis:6379
- name: redisPassword
value: ""
- name: actorStateStore
value: "true"
# dapr-front.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: dapr-deploy-front
labels:
service: front
spec:
replicas: 1
selector:
matchLabels:
service: front
template:
metadata:
labels:
service: front
annotations:
dapr.io/enabled: "true"
dapr.io/app-id: "front"
dapr.io/app-port: "8080"
#dapr.io/config: "dapr-config"
spec:
containers:
- name: daprfrontend
image: registry.cn-hangzhou.aliyuncs.com/shiningrise/statestore:v2
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 8080
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: daprfrontend
labels:
service: front
spec:
type: NodePort
ports:
- port: 80
targetPort: 8080
nodePort: 30002
protocol: TCP
name: http
- port: 50001
targetPort: 50001
nodePort: 30041
protocol: TCP
name: dapr-grpc
selector:
service: front

验证是否成功



我是nat到虚拟机

测试接口,如果都能正常设置状态,获取状态,删除状态就OK了

遇到问题

我上面部署成功的是在vmare虚拟机k8s集群上测试成功了,但我在win11本地测试时死也成功不了,搞了好几天都搞不定

pod运行不了,知道的大佬指点一下啊。

《Blazor+Dapr+K8s微服务之状态管理》 本地运行能成功。

相关文件下载

https://files.cnblogs.com/files/shiningrise/statestore.zip?t=1716723380&download=true

常用命令

docker build -t registry.cn-hangzhou.aliyuncs.com/shiningrise/statestore:v1 -f backend/Dockerfile .
docker build -t daprfrontend -f backend/Dockerfile . ::kubectl delete all --all
::dapr uninstall --all
::dapr init -k kubectl apply -f namespace.yaml
kubectl apply -f dapr-config.yaml
kubectl apply -f zipkin.yaml
kubectl apply -f redis.yaml
kubectl apply -f statestore.yaml
::kubectl apply -f dapr-statestore-test.yaml
:: kubectl delete -f dapr-front.yaml
kubectl apply -f dapr-front.yaml pause

相关文章:

微服务实践k8s&dapr开发部署实验(2)状态管理的更多相关文章

  1. SpringBoot微服务电商项目开发实战 --- 模块版本号统一管理及Redis集成实现

    上一篇文章总结了基于SpringBoot实现分布式微服务下的统一配置.分环境部署配置.以及服务端模块的分离(每一个提供者就是一个独立的微服务).微服务落地.Dubbo整合及提供者.消费者的配置实现.本 ...

  2. CI Weekly #5 | 微服务架构下的持续部署与交付

    CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...

  3. [Abp vNext微服务实践] - 文章目录

    简介 ABP vNext是volosoft的新一代框架,ABP(vNext)完全使用.NET CORE和DDD(领域驱动)打造,目前GitHub已有6K+次提交,发布版本超过40次,Nuget包下载量 ...

  4. 2019年微服务实践第一课,网易&谐云&蘑菇街&奥思技术大咖深度分享

    微服务的概念最早由Martin Fowler与James Lewis于2014年共同提出,核心思想是围绕业务能力组织服务,各个微服务可被独立部署,服务间是松耦合的关系,以及数据和治理的去中心化管理.微 ...

  5. QCon技术干货:个推基于Docker和Kubernetes的微服务实践

    2016年伊始,Docker无比兴盛,如今Kubernetes万人瞩目.在这个无比需要创新与速度的时代,由容器.微服务.DevOps构成的云原生席卷整个IT界.在近期举办的QCon全球软件开发大会上, ...

  6. Serverless 微服务实践-移动应用包分发服务

    背景 阿里云函数计算是事件驱动的全托管计算服务.通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传.函数计算会为您准备好计算资源,以弹性.可靠的方式运行您的代码,并提供日志查询.性能监控.报 ...

  7. .net 微服务实践

    l  前言 本文记录了我的一次.net core 微服务架构实践经验,以及所用到的技术 l  优点 每个服务聚焦于一块业务,无论在开发阶段或是部署阶段都是独立的,更适合被各个小团队开发维护,团队对服务 ...

  8. .NET CORE微服务实践

    .NET CORE微服务实践 https://www.cnblogs.com/zengqinglei/p/9570343.html .NET CORE 实践部署架构图 实践源码:https://git ...

  9. SFDC 微服务实践之路 2016.12.10 杭州(整理)--转

    原文地址:http://mp.weixin.qq.com/s/8cC4Ewt6yPjnxdYxuNZlFQ 微服务是什么? 微服务是一种细粒度(Fine-Grain)的SOA 或许在座的高朋了解过其概 ...

  10. 微服务实践(七):从单体式架构迁移到微服务架构 - DockOne.io

    原文:微服务实践(七):从单体式架构迁移到微服务架构 - DockOne.io [编者的话]这是用微服务开发应用系列博客的第七篇也是最后一篇.第一篇中介绍了微服务架构模式,并且讨论了微服架构的优缺点: ...

随机推荐

  1. 怎么查看摄像头的硬件ID

    1.打开设备管理器:电脑桌面左下角Windows图标点击鼠标右键,点击[设备管理器] 2.展开[照相机] 3.双击摄像头,弹出属性框 4.点击[详细信息],属性点击[硬件ID]

  2. Qt操作ini文件

    操作文件,无非就是读与写,以下为Qt读写ini文件的代码. demo: #include "widget.h" #include <QApplication> #inc ...

  3. redis 简单整理——Lua[十一]

    前言 简单介绍一下Lua. 正文 为了保证多条命令组合的原子性,Redis提供了简单的事务功能以及集 成Lua脚本来解决这个问题. 前面提及到pipline,也提及到pipline 并不是原子性的,如 ...

  4. Oracle 在PL/SQL将字符串分割输出

    Oracle 在PL/SQL将字符串分割输出 示例如下: declare begin for maina in (select tt.line ll from (select regexp_subst ...

  5. 力扣1075(MySQL)-项目员工Ⅰ(简单)

    题目: 项目表 Project: 员工表 Employee: 请写一个 SQL 语句,查询每一个项目中员工的 平均 工作年限,精确到小数点后两位. 查询结果的格式如下:    解题思路: 建表语句: ...

  6. 力扣197(MySQL)-上升的温度(简单)

    题目: 表: Weather 编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 id . 返回结果 不要求顺序 . 查询结果格式如下例. 解题思路: 方法一:使用窗口函数la ...

  7. 如何 0 改造,让单体/微服务应用成为 Serverless Application

    简介: 随着 2013 年以 Docker 为代表的容器技术.CNCF 基金会以及 K8s 的发展等,云原生开始被广大开发者所熟知.云原生时代之前还有两个阶段:一是自建 IDC 机房,二是简单地把原有 ...

  8. 顺丰科技 Hudi on Flink 实时数仓实践

    ​简介: 介绍了顺丰科技数仓的架构,趟过的一些问题.使用 Hudi 来优化整个 job 状态的实践细节,以及未来的一些规划. 本文作者为刘杰,介绍了顺丰科技数仓的架构,趟过的一些问题.使用 Hudi ...

  9. [FE] 被动检测 iframe 加载 src 成功失败的一种思路和方式 (Vue)

    思路:设置定时器一个,n 秒后设置 404 或其它,此时给 iframe 的 onload 事件设置回调函数,加载完成则取消定时器. 示例: data () { return { handler: n ...

  10. dotnet 8 破坏性改动 在 AssemblyInformationalVersionAttribute 添加上 git 的 commit 号

    我在一个 WPF 项目里面,在界面显示应用的版本号,更新到 dotnet 8 的 SDK 之后,发现我的界面布局损坏了.本质上这个破坏性改动和 WPF 没有什么关系,是 dotnet 的 SDK 或编 ...