在主管内部-
以下是我主管课程的一部分:
Router router;
{
counter = 0;
List<Routee> routees = new ArrayList<Routee>();
for (int i = 0; i < 10; i++) {
ActorRef r = getContext().actorOf(Props.create(Children.class));
getContext().watch(r);
routees.add(new ActorRefRoutee(r));
}
router = new Router(new RoundRobinRoutingLogic(), routees);
}
以下是导致子参与者停止的条件:
if (/*some condition*/) {
getContext().parent().tell(new Response(startTime, messages, Status.SUCCESS), getContext().parent());
getContext().stop(getSelf());
}
在akka工具包中,我可以使用哪个API打印我的Supervisor类中所有子角色的状态?
有几种方法。
首先,我看到您从主管处查看您的路由,这是因为您必须在路由终止时将其从路由器中删除。监视一个参与者意味着当一个孩子终止时,监视者(在您的情况下是主管)将收到一条
终止(actorRef)
消息。您可以使用它来维护自己的活动路由列表(在收到此类消息时,您应该已经在更新路由器)。而且,因为您应该已经在更新路由器,所以您可以始终使用路由器查询其路由对象。getRoutees()
其次,
ActorContext
提供了getChildren()
方法,您可以使用该方法枚举当前活动的路由对象。您还可以使用getChild(name)
按名称检查特定路由对象的状态,但当然,您必须在创建它们时为它们设置名称。。。
第三,您可以制定自己的协议,其中主管可以向所有路由对象广播自定义消息,并让他们用您的另一条消息进行回复。这种方法的缺点是,您必须引入某种超时机制,因为您永远不知道有多少路由正在接收您的消息,因此也不知道如何响应预期。
我在这里停下来是因为我认为除非你有更精确的要求,否则除了上面的第一个解决方案,我不会去做任何事情...为什么要重新发明轮子?
我是Akka的新手,我想知道我应该如何处理将工作委托给其他(儿童)演员的演员,但在哪里: 其中一些儿童演员必须按特定顺序参与;和 其中一些子参与者可以以任何顺序参与,并且可以真正地与主/父参与者所做的事情异步执行 假设我有以下儿童演员(不管他们做什么): 假设我有以下调用它们的父参与者: 如你所见: 必须首先“参与”(由家长调用),我们必须等待家长的响应,然后才能继续参与/调用、或 换句话说,当消
我有父母和孩子。每个儿童演员控制一个装置。当我创建所有的子角色时,我给他们一个uuid。 每个子参与者都是通过设备配置创建的,当配置更改时,我希望通过以下方式重新创建参与者: > 停止旧的: 最终的未来停止了=优雅的停止(actorRef,Duration.create(1,时间单位。秒)); Await.result(停止,Duration.create(1, TimeUnit.二)); 重新创
我对阿克卡很陌生,我有一个(希望)简单的问题。我有一个参与者需要重复执行某个小的子任务——也就是说,每次这个参与者收到消息时,它都必须执行N个子任务。这个子任务是我指定给儿童演员的。我的问题是,我是否应该为每个子任务创建一个新的子角色实例?或者我应该简单地产生一个孩子演员,并发送N条消息?在这种情况下,最好的做法是什么? 为了更好地说明我的问题,这里有两个简化的示例(在Java中-但希望对Scal
我经常发现自己使用一个“主”角色,为子任务创建许多子角色。当子任务完成时,主角也应该停止自己。所以当时,我观察子角色并停止主角色context.children.is。 我经常使用这种模式,但因为我从未读过这方面的文章。我不确定,这是一个好主意还是失败的演员有问题。。。? 我已经读过Akka 2中的关机模式,但是这种方法在Java中似乎比我的解决方案更复杂? 以下是我针对具有两个子任务的主要参与者
让我们假设一个使用Akka Typed实现的应用程序有一个持久执行元。这个持久执行元作为其操作的一部分创建了瞬态(或非持久)子执行元,每个子执行元都有一个唯一的ID,这些ID是持久状态的一部分。持久执行元还需要一些与其子级通信的方式,但我们不希望持久化子级的,因为它们实际上不是状态的一部分。在恢复时,持久参与者应该基于恢复的状态重新创建它的子级。这听起来并不像是一个很不寻常的用例,我正在试图弄清楚