Service Fabric -<T> 在 StateManager 中存储可靠参与者的列表



我的用例之一需要在单个事件生产者中存储" start"one_answers"停止"事件之间的所有事件。我们将使用可靠的参与者处理此数据并在收到"停止"事件之后进行总结。在开始和停止之间存储所有事件的直接方法是在类型列表中。

// Init
var evts = new List<DataEvent>();
this.StateManager.TryAddStateAsync("events", evts);
// Fetch, add and save
var evts = this.StateManager.TryGetStateAsync<List<DataEvent>>("events");
evts.Add(newEvent);
this.StateManager.TrySaveStateAsync("events", evts);

从我的理解中,每当我获取现有列表时,添加一个新项目并存储新的更新列表,StoteManager将序列化/对整个数组进行序列化。我的理解正确吗?

以及该解决方案的好选择是什么?

是的,您的理解是正确的。最好的方法是将状态经理视为 - 钥匙值存储,并通过可以合成的密钥对不同的流进行划分。

遵循此处的建议:

"保存"可以包括持久性磁盘和复制,具体取决于 使用的设置。尚未修改的值不是 持续或复制。如果没有修改值,则保存 操作什么都不做。

我建议使用不变的收藏品,例如不可投射主义者而不是列表,否则您的更改最终可能仅在内存中。

您是否考虑过使用两个演员类型:

  • deviceactor
  • EventActor

您的设备演员可以接收事件,为每个事件创建一个新的事件,并在每个事件中存储详细信息),并在DeviceActor-State中保留一个标签,每个EventActor一个。

替代,如果您需要更多信息来过滤事件上的事件:如果您直接在deviceactor中需要更多信息而不调用其子分子。

最新更新