[英]java-akka : sending back message to grandparent
我創建了3個級別的演員。 1級是主管演員。 主管參與者將觸發消息發送給Level2參與者,並且還將根據收到的消息類型根據子參與者(Level1和Level2)返回的響應采取措施。 下面是主管的代碼
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級演員中,工作被委派給某個處理器。 該處理器將生成另一個actor(Level3 actor)。 現在,我需要將taskcomplete的響應從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);
}
如何將響應從3級演員(孩子)發回祖父母(1級)。
在您的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的祖父母。
因此,如果您想告訴Level1 Level3已經完成,則可以在Level2 actor中使用:
parent.tell(message, getSelf());
它將把Level3ActorTaskCompleteMsg
傳遞給Level1,發送者將是Level2,或者您可以使用:
parent.forward(message, getContext());
當Level1將是Level3(即其孫子)時,它將把Level3ActorTaskCompleteMsg
給Level1,並向發送方轉發。
無論哪種方式,您都可以實現將Level3ActorTaskCompleteMsg
從Level3發送到Level1的祖父母的目標。
參見http://doc.akka.io/docs/akka/snapshot/java/untyped-actors.html#Forward_message
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.