2015-06-04 61 views
0

我有一個創建路由器的actor。當所有工作完成後,我想停止當前的演員,停止它的路由器和所有路線。阿卡路由器的路由發送終止消息給自己

這是我的代碼停止層次:

// stopping children 
    context.children foreach context.stop 
    // stopping current actor 
    context.stop(self) 

但在日誌中我得到的消息是這樣的:

留言[akka.dispatch.sysmsg.Terminate]從..至...不是 已交付。 [5]遇到了死信。

即routees發送終止消息itslef。

我認爲這個問題與我的代碼阻止actor(上圖)有關。

我該如何解決它?

回答

1

當你停止自我時,孩子們會自動停止。所以只需使用context stop self

+0

謝謝,但爲什麼路由發送自己的這條消息?當我打電話給「兒童停止」時,這意味着路由器本身將被停止,並自動停止其路由。 – MyTitle

+1

這是一個內部消息,演員不能處理(由系統處理),因爲它是私人的,只有Akka系統可以創建一個。它在演員停止時創建一個。你看到死信,因爲孩子們被停止了兩次。一旦你明確地阻止他們,然後當他們的父母停止並遞歸地停止所有的孩子。 –