2017-07-17 77 views
0

我創建了一些演員,它應該用自己的消息包裝所有傳入的消息並進一步轉發它們。 不幸的是,我沒有任何用戶消息的公共基類,所以我打算用Object.class來捕捉它們。akka是否自發地向自定義演員發送自己的消息?

現在我不確定阿卡是否可以將自己的消息發送給演員。我不想偶爾轉發一些發給我的封裝演員的系統消息。

回答

1

Akka在內部向你的演員發送消息。這些消息擴展了內部SystemMessage特徵。正如源代碼中的描述所述,系統消息在每個參與者的郵箱中形成自己的隊列,並與其他消息分開處理。我們可以在MailboxActorCell中追蹤這些消息的處理。

當您的轉發演員收到SystemMessage時,該消息是而不是包裹和轉發。 Akka在內部處理這些消息,因此轉發角色的行爲不會中斷此係統級活動。

0
class WrapAndForwardActor extends Actor { 
    override def receive: Receive = { 
    case _ => { 
     // blocking 
     // do whatever you want to do with the incoming message 
     sender forward "WrappedMessage" 
    } 

    case "AnotherExample" => { 
     // non blocking 
     val sendTo = sender() 

     // do whatever you want to do with the message 
     // non blocking futures 

     //when future is complete 
     sendTo forward "WrappedMessage" 
    } 
    } 
} 
+0

感謝您的回答,但不清楚它是什麼... 我的問題是:轉發相關性 - 我想轉發由用戶發送的消息(自定義消息),而不是框架的消息。我不確定框架是否可以向用戶定義的actor發送這樣的內容。所以,如果是的話 - 簡單的「全部轉發」是不合適的策略。 – Silk0vsky

相關問題