Akka.Net将邮件转发给GrandChild

时间:2018-10-28 12:22:09

标签: akka.net

我一直在花一些时间看Akka.Net tutorial,现在我开始构建自己的跟踪系统,该系统可以跟踪多辆公共汽车上的多个人。

到目前为止,我有一个BusManagerActor位于顶部,它跟踪所有总线,并有一个私有的busIds和IActorRefs字典。

然后我有一个BusActor,在其下面具有PersonActors,并保留一个personIds和IActorRefs字典。

每个PersonActor都有纬度/经度,因此我们可以跟踪每个人。这样,我就可以“平均”所有人的位置,并大致估算出公交车的位置。

我的消息类型为PersonActor.RecordLocation:

public class RecordLocation
    {
        public long RequestId { get; }
        public string BusId { get; }
        public string PersonId { get; }
        public double? Latitude { get; }
        public double? Longitude { get; }

        public RecordLocation(long requestId, string busId, string personId, double? latitude, double? longitude)
        {
            RequestId = requestId;
            BusId= busId;
            PersonId = personId;
            Latitude = latitude;
            Longitude = longitude;
        }
    } 

然后,我必须处理层次结构中每个参与者中的每个消息以转发它:

case PersonActor.RecordLocation trackMsg:
    if (_busIdToActor.TryGetValue(trackMsg.BusId, out var actorRef))
    {
        actorRef.Forward(trackMsg);
    }
    else
    {
       Log.Info($"Creating BusActor for {trackMsg.BusId}");
       var busActor = Context.ActorOf(BusActor.Props(trackMsg.BusId), $"bus-{trackMsg.BusId}");
       Context.Watch(busActor);
       busActor.Forward(trackMsg);
       _busIdToActor.Add(trackMsg.BusId, busActor);
    }
    break;

我的问题有两个:

1)我应该这样吗?

2)如果是这样,我是否必须像对待自己一样处理在每个演员中发送的每条消息?

0 个答案:

没有答案