.net 在AKKA的Receive方法中创建子角色有意义吗?

.net 在AKKA的Receive方法中创建子角色有意义吗?,.net,akka,akka.net,actor-model,.net,Akka,Akka.net,Actor Model,让我们假设我需要将一些子进程委托给一个子参与者。我可以在actor初始化期间创建子actor(在AKKA.NET中称为PreStart)。如果我需要多个儿童演员并行运行,我可以使用AKKA路由器。我认为这是推荐的方法。 但是,我也可以在Receive方法内创建子actor,并让对IActorRef实例的引用具有Receive方法的局部范围。这种方法有意义吗?与上述情况相比,它是否有任何优势?是的。例如,如果接收到的每个消息都开始某个有状态的过程,那么您将创建子参与者来处理该过程。这些子角色可能需

让我们假设我需要将一些子进程委托给一个子参与者。我可以在actor初始化期间创建子actor(在AKKA.NET中称为PreStart)。如果我需要多个儿童演员并行运行,我可以使用AKKA路由器。我认为这是推荐的方法。
但是,我也可以在Receive方法内创建子actor,并让对IActorRef实例的引用具有Receive方法的局部范围。这种方法有意义吗?与上述情况相比,它是否有任何优势?

是的。例如,如果接收到的每个消息都开始某个有状态的过程,那么您将创建子参与者来处理该过程。这些子角色可能需要对来自其他角色的其他消息做出响应。然后可能会有最后一条消息告诉流程完成。您可以作为消息的一部分传递IActorRef,因此本地范围的概念不一定适用。

是。例如,如果接收到的每个消息都开始某个有状态的过程,那么您将创建子参与者来处理该过程。这些子角色可能需要对来自其他角色的其他消息做出响应。然后可能会有最后一条消息告诉流程完成。您可以将IActorRef作为消息的一部分进行传递,因此本地作用域的概念不一定适用。

在消息处理程序中创建子角色非常有意义,特别是当您无法预先创建它们时,因为您根据传入的数据动态创建它们

这方面的一个主要示例是,您为每个实体id创建了一个参与者。因此,如果您收到一条具有以前从未收到过的新id的消息,您将需要启动一个新的子参与者

你可以看到。虽然第一个诱惑是维护一个儿童演员id字典,但事实证明这甚至不是必要的。正如web爬虫示例所做的那样,您可以检查参与者的
子项
,以确定它是否已经有了该子项


当您动态创建子角色时,您可能希望给它们一个
ReceiveTimeout
,以确保它们不会因为永远存在而泄漏内存。

在消息处理程序中创建子角色非常有意义,尤其是当您无法预先创建它们时,因为您根据传入的数据动态创建它们

这方面的一个主要示例是,您为每个实体id创建了一个参与者。因此,如果您收到一条具有以前从未收到过的新id的消息,您将需要启动一个新的子参与者

你可以看到。虽然第一个诱惑是维护一个儿童演员id字典,但事实证明这甚至不是必要的。正如web爬虫示例所做的那样,您可以检查参与者的
子项
,以确定它是否已经有了该子项


动态创建子角色时,您可能希望给它们一个
ReceiveTimeout
,以确保它们不会因为永远活着而泄漏内存。

动态创建角色的另一个示例是描述的额外和客串模式以及源代码

浮雕图案的基本理念是用一个反应灵敏的正面来面对实际的工人(浮雕)。它与路由器不同,因为Facade不在响应路径上,它将所有相关上下文交给Cameo,让它完成作业并将结果直接传递给发送方(原始作业的发送方)

额外的模式是相同的,但与匿名演员。Cameo actor更好,因为它提供了更好的日志(具有可读的参与者名称)并更好地构造了代码。此外,更难了解门面参与者的状态


一句话:为每个请求创建参与者可以让您更好地隔离工作单元,让“入口点”参与者不那么忙,并提供更好的范围日志(这对于理解分布式系统行为非常重要).

动态创建演员的另一个例子是描述的额外和客串模式以及源代码

浮雕图案的基本理念是用一个反应灵敏的正面来面对实际的工人(浮雕)。它与路由器不同,因为Facade不在响应路径上,它将所有相关上下文交给Cameo,让它完成作业并将结果直接传递给发送方(原始作业的发送方)

额外的模式是相同的,但与匿名演员。Cameo actor更好,因为它提供了更好的日志(具有可读的参与者名称)并更好地构造了代码。此外,更难了解门面参与者的状态


一句话:根据请求创建参与者可以更好地隔离工作单元,减少“入口点”参与者的忙碌,并提供更好的范围日志(这对于理解分布式系统行为非常重要)。

好的,我明白了。我在某个地方读到,最佳实践提倡尽可能避免有状态的参与者,而是将所有状态放在传递的消息中。正如他们所说,这都是关于协议的。你同意这个论点吗?或者你经常使用有状态的子角色吗?看看他们在哪里讨论有状态的角色好吧。我在某个地方读到,最佳实践提倡尽可能避免有状态的参与者,而是将所有状态放在传递的消息中。正如他们所说,这都是关于协议的。你同意这个论点吗?或者你经常使用有状态的儿童演员吗?看看他们在哪里讨论有状态演员谢谢@Tim。我会查这些图案的。谢谢你@Tim。我将查找这些模式。