Dapr 状态管理
将 Dapr.Client NuGet 包添加到应用程序:
Dapr.Client
打开 Program.cs
using Dapr.Client;
const string storeName = "statestore";
const string key = "counter";
var daprClient = new DaprClientBuilder().Build();
var counter = await daprClient.GetStateAsync<int>(storeName, key);
while (true)
{
Console.WriteLine($"Counter = {counter++}");
await daprClient.SaveStateAsync(storeName, key, counter);
await Task.Delay(1000);
}
重要:必须要注意的是,使用状态管理构建块时始终传递显式 app-id 参数。 对于每个键/值对,构建块将应用程序 ID 值用作其状态键的前缀。 如果应用程序 ID 发生了更改,则将无法再访问之前存储的状态。
打开项目所在的目录,运行
dapr run --app-id DaprCounter dotnet run
后写入优先”策略
var weatherForecast = await daprClient.GetStateAsync<WeatherForecast>("statestore", "AMS");
daprClient.SaveStateAsync("statestore", "AMS", weatherForecast);
乐观并发控制 (OCC) 与“先写入优先”策略一起使用
请首先使用 方法检索当前的 ETag。 然后,写入更新的值,并使用 DaprClient.TrySaveStateAsync 方法传递检索到的 ETag。
var (weatherForecast, etag) = await daprClient.GetStateAndETagAsync<WeatherForecast>("statestore", city);
// ... make some changes to the retrieved weather forecast
var result = await daprClient.TrySaveStateAsync("statestore", city, weatherForecast, etag);
检索数据后,数据(以及关联的 ETag)在状态存储中被更改时,DaprClient.TrySaveStateAsync 方法将失败。 该方法返回一个布尔值,以指示调用是否成功。 处理失败的一种策略是,仅需从状态存储重新加载更新后的数据,再次进行更改,然后重新提交更新。
如果始终希望写入成功,而不考虑对数据的其他更改,请使用“后写入优先”策略。
浙公网安备 33010602011771号