AKKA消息超时



我使用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 docs:

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 Klanghttps://stackoverflow.com/a/12754034/1956540

最新更新