簡體   English   中英

java-akka:將消息發送回祖父母

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM