从Akka.net中的路径字符串创建IActorRef

时间:2018-06-06 08:46:06

标签: akka.net

如何从路径创建IActorRef作为字符串?有没有像:

string path = "akka://Somesystem/user/myactor";

IActorRef actorRef = ActorRef.FromPath(path); // this is pseudo-code

actorRef.Tell(...);

我不会膨胀我的消息类/结构体以及具有Akka.net IActorRef类型的显式依赖性的API接口(可能会切换到幕后的Proto.Actor等其他实现)。

2 个答案:

答案 0 :(得分:1)

不幸的是没有。创建actor的唯一方法是使用ActorOf方法。来自docs

  

以上部分详细描述的内容可以简单地概括和记忆如下:

     
      
  • ActorOf只创建一个新的actor,并将其创建为直接的   调用此方法的上下文的子级(可能是   任何演员或演员系统)。
  •   
  • ActorSelection只在传递消息时查找现有的actor,即不创建actor或验证是否存在   创建选择时的演员
  •   

ActorOf {{1}}在创建actor时需要Props属性,并带有actor名称的可选字符串。这可以从演员系统本身或在演员的上下文中调用。

答案 1 :(得分:1)

在你的例子中,你描述了你想通过路径告诉另一个演员一条消息。 因此,您可以使用 ActorSelection 。 有一篇petabridge博客文章描述了 ActorSelection 的一些建议,请参阅:https://petabridge.com/blog/when-should-I-use-actor-selection/

但是,您写道:我不会膨胀我的消息类/结构以及具有显式依赖于Akka.net IActorRef类型的API接口(可能切换到其他实现,如Proto.Actor背后幕布)。

我不明白你当前的用例是什么。但据我所知,您不希望在您的域逻辑中依赖于Akka.net。

  1. 如果你想从演员系统外部向演员发送消息,你可以用接口实现一个服务,你只需要把你的消息放在那里,然后在里面使用 ActorSelection (唯一的地方)依赖于Akka.net。
  2. 如果你想将你的演员内部的消息发送给其他演员,而你担心你无法交换基础设施(取代Akka.net),你应该尝试将你的业务逻辑移到actor类之外的域类中,中立框架。并使用Akka.net进行演员之间的沟通。