服务结构参与者状态和列表

Posted

技术标签:

【中文标题】服务结构参与者状态和列表【英文标题】:Service fabric actor state and list 【发布时间】:2018-03-06 23:14:02 【问题描述】:

是否建议在 Service Fabric Actor 中有一个列表?我正在尝试将用户收藏夹保留在用户 Actor 中。这种情况的最佳方法是什么?

【问题讨论】:

【参考方案1】:

可以,只要您将列表视为不可变的。

状态管理器检索方法返回对对象的引用 本地内存。仅在本地内存中修改此对象不会 使其得以持久保存。当一个对象从 状态管理器并修改,必须重新插入状态 经理被永久保存。

-

下面的 UserInfo 类型演示了如何定义不可变类型 充分利用上述建议。

[DataContract]
// If you don’t seal, you must ensure that any derived classes are also immutable
public sealed class UserInfo 
   private static readonly IEnumerable<ItemId> NoBids = ImmutableList<ItemId>.Empty;

   public UserInfo(String email, IEnumerable<ItemId> itemsBidding = null) 
      Email = email;
      ItemsBidding = (itemsBidding == null) ? NoBids : itemsBidding.ToImmutableList();
   

   [OnDeserialized]
   private void OnDeserialized(StreamingContext context) 
      // Convert the deserialized collection to an immutable collection
      ItemsBidding = ItemsBidding.ToImmutableList();
   

   [DataMember]
   public readonly String Email;

   // Ideally, this would be a readonly field but it can't be because OnDeserialized
   // has to set it. So instead, the getter is public and the setter is private.
   [DataMember]
   public IEnumerable<ItemId> ItemsBidding  get; private set; 

   // Since each UserInfo object is immutable, we add a new ItemId to the ItemsBidding
   // collection by creating a new immutable UserInfo object with the added ItemId.
   public UserInfo AddItemBidding(ItemId itemId) 
      return new UserInfo(Email, ((ImmutableList<ItemId>)ItemsBidding).Add(itemId));
   

更多信息:1 和 2

【讨论】:

以上是关于服务结构参与者状态和列表的主要内容,如果未能解决你的问题,请参考以下文章

服务结构参与者提醒和重复消息

有状态的参与者和方法调用的完成

数据结构和算法 负载均衡算法

长时间运行的服务结构参与者提醒回调

SwiftUI - 如何在修改来自同一结构的状态变量时避免刷新列表

UML类图和用例图