首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >太多IActorRefs in Akka.net

太多IActorRefs in Akka.net
EN

Stack Overflow用户
提问于 2020-08-13 15:26:43
回答 2查看 412关注 0票数 5

假设我有以下的Actor层次结构:

代码语言:javascript
复制
user
|____A___|---E
|        |---F
|        |---G
|
|____B___I
|____C___J
|____D___K

让我们假设Actor E需要IActorRef的Actors I,J,K,如果系统扩展和需要更多的Actor,用户ActorSelection 不建议在本地使用就会在构造函数中传递IActorRef。

是否有一种适当的、动态的方法来获取ActorRef作为系统规模?

我考虑过是否应该问这个问题,因为它可以解释为基于意见的问题,但是我真的对这个问题很不信任,因为我已经搜索了很多,而且还不清楚这个问题的最佳实践是什么,因为代码可能会变得非常混乱和无法及时阅读。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-14 09:27:22

因此,我查找了文档并彻底阅读了它,我发现有两种方法可以以干净的方式获得IActorRef。

默认的方法是使用ActorSelection并等待回复,从该回复中可以使用Sender属性并存储IactorRef。您可以使用builtIn消息Identify,一旦发送给参与者,接收方将自动回复包含IActorRef的ActorIdentity消息。

一个完整的示例可以找到这里

票数 0
EN

Stack Overflow用户

发布于 2020-08-13 18:33:47

只需开始发送消息,而不是试图与(许多)其他Actor预先配置Actors。当有许多不同的行为者时,这使得初始化变得非常复杂。另外:不能将传递给构造函数的IActorRef句柄视为静态的和永久有效的:当Actor脱机时,您需要一种机制来检测该句柄并使其句柄无效,或删除它。集群中的其他参与者需要查看Akka日志消息。不能保证..。等等。

相反,当您将一个新的Actor连接到集群时,通过pubsub发出(推送)您的身份。您的新演员信息可能是: ActorSytem.Name+IActorRef+RoleString。

https://getakka.net/articles/clustering/distributed-publish-subscribe.html

RoleString是Actor任务的描述符。其他参与者可以基于IActorRef决定注册您的RoleString。

在此过程中,其他订阅者(演员)将获取您的身份并存储您的身份。然后,他们以同样的方式,通过同样的阴阳发出他们的身份。因此,您将收到响应中所需的RoleString标识。而其他集群节点(Actors)知道您的存在。

当Actor需要断开连接时,首先发出一个pubsub消息,然后实际将Actor与集群断开连接。这样做,其他演员都知道演员出轨了。

这个策略的一个陷阱是:防止无尽的公共循环(I/O雪崩)。我使用的解决方案:通过测试之前发布的消息的时间来防止Actor发送过多的消息。每分钟写一条信息,而不管其他演员。这将导致心跳,而不是大量的信息。你将定期被告知所有演员的在线状态。在这种情况下,不需要退出/脱机消息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63398330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档