【问题标题】:Akka.net carry on information within an actor hierarchyAkka.net 在参与者层次结构中进行信息
【发布时间】:2016-08-07 11:59:36
【问题描述】:

我正在尝试传递有关演员层次结构的某些信息,以便在他们收到消息时可用。例如,我每个用户有一个演员链,我想在该演员的所有孩子中提供用户信息(名称)。

目前,我正在尝试从层次结构中的任何子级访问用户演员以获取名称,但是 a) 我不知道这是否是一个好习惯,b) A 根本不知道我是否可以当我在层次结构中有多个级别并且用户名显然是动态的时实现这一点。

所以我已经尝试过了(假设我想访问父母的父母)

var name = Context.ActorSelection("../..").Path.Name;

这并没有返回任何有用的东西,而且似乎没有在层次结构中上升两级。

我认为的另一个选项是创建演员层次结构并使用 Props 构建下面的所有节点并再次传递用户名,我不知道这是否是一个好习惯/正确的做法。比如:

public class MyActor: TypedActor
{
    public MyActor(string id)
    {
        _id = id;
        Context.ActorOf(Props.Create<ChildActor>(_id), "childname");
    }
}

等等……

【问题讨论】:

    标签: akka.net


    【解决方案1】:

    我不知道你要解决什么样的问题,但我可以建议不要在actor构造函数(props)中耦合userId

    在根角色中,您可以存储包含用户角色参考和用户 ID 的列表 (dict),然后在子角色中使用 &lt;PRESTART&gt; 操作请求用户 ID。

    protected override void PreStart()
            {
                Context.Parent.Tell(new GetUserIdMessage());
                base.PreStart();
            }
    

    然后添加Receive&lt;UserIdMessage&gt; 并将其存储在演员内的字段中 这将允许在没有耦合的情况下编写代码,并且这额外的几条消息不应该对系统性能产生影响

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-26
      • 1970-01-01
      • 2012-01-09
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多