gpt4 book ai didi

java-akka : sending back message to grandparent

转载 作者:太空宇宙 更新时间:2023-11-04 13:39:02 25 4
gpt4 key购买 nike

我创建了 3 个级别的 Actor 。1 级是主管 Actor 。主管参与者将向 Level2 Actor 触发消息,并且还会根据子参与者(Level1 和 Level2)根据收到的消息类型返回的响应采取行动。下面是supervisor的代码

if (message instanceof OutBoundDataExportDTO) {
// This to trigger query processor

OutBoundDataExportDTO data = OutBoundDataExportDTO.class.cast(message);
LOGGER.info("Received: " + data.toString());
ActorRef ruleInstExportActor = actorSystem
.actorOf(Props.create(OutboundsQueryActor.class, applicationContext)
.withRouter(new RoundRobinPool(5)));
ruleInstExportActor.tell(data, getSelf());

} else if (message instanceof TaskCompleteMsg) {
TaskCompleteMsg taskCompleteMsg= TaskCompleteMsg.class.cast(message);
taskService.update(taskCompleteMsg);
}

在 2 级参与者中,工作被委托(delegate)给某个处理器。该处理器将生成另一个 actor(Level3 actor)。现在,我需要将任务完成的响应从 Level3 actor 返回给 Level1 actor(主管 actor),以便它根据响应采取行动。

下面是Level2 actor的示例代码:

if (message instanceof Level1ActorMessage) {
OutboundQueryProcessor queryProcessor = queryProcessorFactory
.getQueryProcessor(queryName);
response = queryProcessor.executeQuery(templateId, queryData, task);

} else if (message instanceof Level3ActorTaskCompleteMsg) { // This is the response from Level 3 actor, once it has completed
ActorRef parent = getContext().parent(); // This gives me the parent(Level2)
// How do i send it back to its parent
// parent.tell(returnResponse, parent);
}

我如何将响应从第三级 Actor ( child )发送回祖 parent (第一级)。

最佳答案

在 Level2 actor 的代码片段中:

if (message instanceof Level1ActorMessage) {
OutboundQueryProcessor queryProcessor = queryProcessorFactory.getQueryProcessor(queryName);
response = queryProcessor.executeQuery(templateId, queryData, task);

} else if(message instanceof Level3ActorTaskCompleteMsg){// This is the response from Level 3 actor, once it has completed
ActorRef parent = getContext().parent();// This gives me the parent(Level2)
//How do i send it back to its parent
// parent.tell(returnResponse, parent);
}

您有一行 ActorRef Parent = getContext().parent();//This Gives me the Parent(Level2) ,它为您提供了 Level2 父级的 ActorRef,即 Level1,它是 Level3 的祖 parent 。

因此,如果您想告诉 Level1 Level3 已完成,那么在 Level2 actor 中您可以使用:

parent.tell(message, getSelf());

它将把Level3ActorTaskCompleteMsg传递给Level1,发送者将是Level2,或者您可以使用:

parent.forward(message, getContext());

当 Level1 变为 Level3(即它的孙子级)时,它将把 Level3ActorTaskCompleteMsg 转发给 Level1 和发​​送者。

无论哪种方式,您都将实现将 Level3ActorTaskCompleteMsg 从 Level3 发送到其位于 Level1 的祖 parent 的目标。

参见http://doc.akka.io/docs/akka/snapshot/java/untyped-actors.html#Forward_message

关于java-akka : sending back message to grandparent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31402936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com