[英]Synchronization of Actor messages
如何处理要按特定顺序执行和完成的角色之间的消息?
换句话说,例如,如果Message A
要被前总是收到Message B
,用阿卡它可以怎么做?
我在这里假设您的意思是您需要先获得“消息A”,然后才能处理“消息B”。 其他替代方法是:
因此,放弃了这些其他选项之后,这是一种技术。 首先,为需要消息A和消息B的状态定义单独的接收方法:
def receivingA = Receive {
case MessageA(x) => ...
}
def receivingB = Receive {
case MessageB(y) => ...
}
您可以将第一个设置为默认值:
def receive = receivingA
收到消息A时,可以更改状态以期望消息B:
case MessageA(x) =>
// do stuff
become(receivingB)
在消息B上,您可以返回第一种情况,但是我将跳过。
现在唯一缺少的是您将如何处理意外收到的消息。 您什么也不能做,这会将它们发送到错误日志,或者可以通过重写此方法来做一些事情:
def unhandled(msg: Any): Unit = message match {
case Terminated(target) => ...
case msg => ...
}
默认行为将未处理的消息作为UnhandledMessage
类型的对象发布到系统事件流,因此您也可以通过这种方式获取它们,尽管这只会将它们重新插入其他类型的队列中。 最后,您可能会乱序接收消息B并将其排队,然后在收到消息A后重新发送它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.