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