刪除鏈接我有阿卡演員K的鏈 - > L - >男,其中K的消息發送至L,L發送消息爲M,並且每個可使用回覆到它的前身接收到的消息的sender
。如何幹淨地/安全地從異步通信鏈
我的問題是:如何才能安全地從鏈斷開鏈接L,使得操作k之後將消息直接發送到M和M認爲K作爲其sender
?
如果每個演員都是穩定和長壽的,我可以研究如何告訴K和M彼此交談。 L可以掛起足夠長的時間來轉發已經在她的郵箱中的郵件,直到獲得K和M中的每一個不再與L對話的信號。
然而,K和M也可能考慮將自己解除鏈接,這就是一切都變得多毛。
是否有一個熟知的協議使安全工作?到目前爲止,我還沒有找到正確的搜索條件。
我知道一個選擇是凍結系統並將整個事物減去L拷貝到一個新鏈中。但是,我想要實現更實時,更少中斷的解決方案。
我一直在思考一些類型的鎖交換,其中K和M保證不取消鏈接自己,直到L具有完成斷開鏈接和轉發的所有消息。但是,即使演員不會完全鎖定(只是延遲他們自己的取消鏈接操作,直到方便的時間),任何帶有「鎖定」一詞的解決方案在異步解決方案中似乎都很尷尬。
你想達到什麼目的?您想通過從異步通信鏈中刪除鏈接來解決這個大問題? –
會,如果你有一個有狀態的代理代替L所有第一委託給你的電流I處理它的工作,但在某些時候,直接忘掉該委託,簡單地將消息傳遞K和M.你們之間仍然有3個演員,但你是有效的在某個時候將其中一個變成了無操作。 – erickson
如果您想將L與M交換,您的演員K可以向L發送消息Z,之後可以停止發送消息並等待確認消息X.如果消息Z(如果您使用基於優先級的郵箱,不要忘記設置爲低於Z的常規優先級),則您的演員L可以向K發送確認消息X(並可以選擇自行停止)。接收到X K後,可以安全地將消息直接發送給M.您可以使用[FSM](http://doc.akka.io/docs/akka/snapshot/scala/fsm.html)來實現狀態邏輯。 –