簡體   English   中英

AKKA消息超時

[英]AKKA timeout on message

我將Java與Akka一起使用。 我有這種情況:

演員A向演員B發送一條消息。

B等待一個超時,如果在這個超時中沒有相同的消息(相同消息類型)發生,則向參與者C發送消息。

我該如何實施? 我必須用B onReceive方法編寫什么?

public void onReceive(Object message){
        if(message instanceof EventOccurred){
             //wait a timeout to see if other EventOccurred message are   coming               
             //and then send a messago to actor C
        }
} 

在我的項目中,我有一個文件系統觀察者,當文件被修改,創建或刪除時(這是參與者A),他會接收事件,首先我只觀察一個文件。

當此文件上的事件發生時,我的演員A向另一個演員(演員B)發送了一條消息,該消息首先等待超時,其次,如果該文件上沒有其他事件發生(因此如果演員B上沒有到達其他消息),則發送給執行者C的消息,它計算該文件的哈希值。

@ Snickers3192我實現了所有這些功能,我只想知道akka是否真的可能。

也許ReceiveTimeout可以為您提供幫助。 這是一種消息驅動的非阻塞方式來接收超時。 來自Akka文檔:

setReceiveTimeout定義不活動超時,之后將觸發ReceiveTimeout消息的發送

public class MyReceiveTimeoutUntypedActor extends UntypedActor {

    public MyReceiveTimeoutUntypedActor() {
        // To set an initial delay
        getContext().setReceiveTimeout(Duration.create("30 seconds"));
    }

    public void onReceive(Object message) {
        if (message.equals("Hello")) {
            // To set in a response to a message
            getContext().setReceiveTimeout(Duration.create("1 second"));
        } else if (message instanceof ReceiveTimeout) {
            // To turn it off
            getContext().setReceiveTimeout(Duration.Undefined());
        } else {
           unhandled(message);
        }
    }
}

也可以看看:

如果您想等待任何消息,只需設置一個receiveTimeout-Viktor Klang https://stackoverflow.com/a/12754034/1956540

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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