No description, website, or topics provided.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
project
src
.gitignore
LICENSE
README.md
activator
activator-launch-1.2.3.jar
activator.bat
build.sbt

README.md

Akka Route Joke

延用 吃飯睡覺打東東 的企鵝笑話,來 demo Akka Route 的功能。每隻企鵝會記錄被打了幾次。

名叫 東東 的企鵝,在被打第 4 次時,會說 不要打擾我,在第 6 次時,會 爆炸,在超過第 6 次後,牠就成仙了。

記者在啟動後,會對企鵝群打 100 次。

說明

本程式,主要是由 Reporter 來產生 Penguin,也因此 ReporterPenguin 的 supervisor。各位可以在 Reporter 的程式碼中,修改

override val supervisorStrategy = 
    OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute) {
    //AllForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute) {
    case _ : DontBotherMeException => Resume
    case _ : ExplodeException => Restart
    case _ : IamGodException => Stop
    case _ : Exception => Escalate
    }

或註解掉這一段程式,來了解 Akka Stragegy 的運作方式。

Akka Stragey 預設是 OneForOneStrategy,在發現有 Exception 時,會自動重啟 Child Actor.

修改

//var router = Router(SmallestMailboxRoutingLogic(), penguins.toIndexedSeq)
var router = Router(RoundRobinRoutingLogic(), penguins.toIndexedSeq)

來測試不同的 Routing 方式。

如果有子 Actor 停止時,會收到 Terminated 訊息。可以重新啟動新的 Actor。

case Terminated(child) =>
      router = router.removeRoutee(child)
      val actor = 
        if (child.path.toString().indexOf("dongdong") >= 0)
          context.actorOf(Props[DongDong], "dongdong")
        else
          context.actorOf(Props(classOf[Penguin], "Penguin" + (System.nanoTime())))

      context watch actor
      router = router.addRoutee(actor)