当前位置: 首页 > 知识库问答 >
问题:

我怎么能保证一个汇集的AKKA演员只发送和接收来自自己的儿童演员?

谭坚诚
2023-03-14

我有几个演员在一个池子里。我希望这些演员中的每一个都能创造出儿童演员。问题是,当我创建子角色并保存引用时,我永远不知道哪个子角色将获得池化角色发送给它的消息。该池被创建为smallstMailBox池。在池演员的构造函数中,我这样做:

documentReaderActor = this.getContext().actorOf(Props.create(DocumentReaderActor.class ));

这是我的孩子。我做一些花样。有人问,也有人说,但结果不是同一个孩子。首先我做一个:

documentReaderActor.tell(startReading, getSelf());

后来我一遍又一遍地做:

     Future<Object> future = Patterns.ask(documentReaderActor, adSend,
                timeout);
     adReceive = (AkkaDocument) Await.result(future, timeout.duration());

(adReceive和adSend是AkkaDocument类对象)

完成后,我发送:

documentReaderActor.tell(documentDone, getSelf());

所以我有10个这样的参与者,每个参与者都创建了一个子参与者,但是消息并不是每次都发送给同一个子参与者。我怎样才能保证合演的演员只和自己的孩子说话?

共有1个答案

孔冥夜
2023-03-14

Akka的SmallestMailBox路由器的工作方式是,它将根据以下规则将发送到其ActorRef的任何消息按所示顺序重定向到其中一个路由对象:

  • 选择邮箱为空的任何空闲路由(不处理邮件)
  • 选择邮箱为空的任何路由对象
  • 选择邮箱中挂起邮件最少的路由对象
  • LI>选择任何远程路由器,远程角色被认为是优先级最低的,因为它们的邮箱大小未知[

    从你的角度来看,这意味着你不能保证对你的一个请求的响应最终会在创建它的同一个参与者那里。

    如果你想使用一个池,你可能需要滚动你自己的自定义路由器。

 类似资料:
  • 我对阿克卡很陌生,我有一个(希望)简单的问题。我有一个参与者需要重复执行某个小的子任务——也就是说,每次这个参与者收到消息时,它都必须执行N个子任务。这个子任务是我指定给儿童演员的。我的问题是,我是否应该为每个子任务创建一个新的子角色实例?或者我应该简单地产生一个孩子演员,并发送N条消息?在这种情况下,最好的做法是什么? 为了更好地说明我的问题,这里有两个简化的示例(在Java中-但希望对Scal

  • 我经常发现自己使用一个“主”角色,为子任务创建许多子角色。当子任务完成时,主角也应该停止自己。所以当时,我观察子角色并停止主角色context.children.is。 我经常使用这种模式,但因为我从未读过这方面的文章。我不确定,这是一个好主意还是失败的演员有问题。。。? 我已经读过Akka 2中的关机模式,但是这种方法在Java中似乎比我的解决方案更复杂? 以下是我针对具有两个子任务的主要参与者

  • 让我们假设一个使用Akka Typed实现的应用程序有一个持久执行元。这个持久执行元作为其操作的一部分创建了瞬态(或非持久)子执行元,每个子执行元都有一个唯一的ID,这些ID是持久状态的一部分。持久执行元还需要一些与其子级通信的方式,但我们不希望持久化子级的,因为它们实际上不是状态的一部分。在恢复时,持久参与者应该基于恢复的状态重新创建它的子级。这听起来并不像是一个很不寻常的用例,我正在试图弄清楚

  • 我正在学习Akka类型的Actor库,并尝试使用。但是它返回一个类型,而不是我最初创建的子参与者的类型- 我所做的解决方法是在创建时将子对象简单地存储在hashmap中。但这不是一个可伸缩的。 我该如何实现这一点?尤其是在分布式场景下?

  • 假设我有一个参与者,负责根据某个键将消息路由到子参与者集合,因此其内部状态如下所示: 除了路由消息外,父参与者还必须支持添加和删除操作: 希望上面的代码足以让我大致了解我要做的事情。请注意,我使用map键作为子参与者的名称。问题在于,上述模式无法处理同一个键的添加、删除和添加消息的快速连续情况-它通常在第二次添加时失败,原因是: 显然,在Remove messages上停止子参与者是异步的,这就是

  • 我是Akka的新手,我想知道我应该如何处理将工作委托给其他(儿童)演员的演员,但在哪里: 其中一些儿童演员必须按特定顺序参与;和 其中一些子参与者可以以任何顺序参与,并且可以真正地与主/父参与者所做的事情异步执行 假设我有以下儿童演员(不管他们做什么): 假设我有以下调用它们的父参与者: 如你所见: 必须首先“参与”(由家长调用),我们必须等待家长的响应,然后才能继续参与/调用、或 换句话说,当消