学海无涯

导航

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 方法将失败。 该方法返回一个布尔值,以指示调用是否成功。 处理失败的一种策略是,仅需从状态存储重新加载更新后的数据,再次进行更改,然后重新提交更新。

如果始终希望写入成功,而不考虑对数据的其他更改,请使用“后写入优先”策略。

 

 

posted on 2022-10-25 08:48  宁静致远.  阅读(106)  评论(0)    收藏  举报