Akka.net在actor层次结构中传递信息

时间:2016-04-15 13:22:39

标签: akka.net

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

目前我试图从层次结构中的任何孩子访问用户角色以获取名称但是a)我不知道这是否是一种良好的做法而且b)简单当我在层次结构中有多个级别并且用户名显然是动态的时候,我不知道是否可以实现这一点。

所以我试过这个(假设我想访问父母的父母)

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

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

我认为另一个选项是创建actor层次结构并使用Props构建下面的所有节点并传入用户名,我再也不知道这是不是一个好的做法/正确的事情去做。例如:

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

等等......

1 个答案:

答案 0 :(得分:3)

我不知道你将要解决什么样的问题,但我可以建议不要在演员构造函数(道具)中结合userId

在root actor中你可以存储一个包含用户actor引用和用户id的列表(dict),然后在使用<PRESTART>动作的子actor中请求用户ID。

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

然后添加Receive<UserIdMessage>并将其存储在actor内的字段中 这将允许没有耦合的写代码,这些额外的消息不会对系统性能产生影响