繁体   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