[Scala] akka actor編程(一)


Akka基礎

  • Akka筆記之Actor簡介

    Akka中的Actor遵循Actor模型。你可以把Actor當作是人。這些人不會親自去和別人交談。他們只通過郵件來交流。

    1. 消息傳遞 2. 並發 3. 異常處理 4. 多任務 5. 消息鏈

  • Akka筆記之消息傳遞

        消息發送給actor代理;

        消息是不可變對象(可帶有屬性的case class);

        分發器dispatcher和郵箱: dispatcher從actorRef取出一條消息放在目標actor郵箱中,然后放mailbox放在一個Thread上;當MailBox的run方法運行的時候,它會從隊列中取出一條消息, 然后將它傳給Actor去處理。在Actor的世界中,郵箱一有機會就會要求Actor去完成自己的任務。

  • Akka筆記之日志及測試

        使用slf4j打印日志:Akka通過一個叫做ActorLogging的特質(trait)來實現的這一功能。可以這個trait混入(mixin)到類中。當我們要打印一條消息的時候,ActorLogging中的日志方法會將日志信息發布到一個EventStream流中。沒錯,我的確說的是發布。

        EventStream:EventStream就像是一個我們用來發布及接收消息的消息代理。它與常見的消息中間件的根本區別在於EventStream的訂閱者只能是一個Actor。DefaultLogger默認訂閱這些消息並打印到標准輸出。

akka{ 
    loggers = ["akka.event.slf4j.Slf4jLogger"]
    loglevel = "DEBUG"
    logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"
}
  • Akka筆記之請求與響應

        技術上來講,消息發送給Actor就是希望能有副作用的。設計上便是如此。目標Actor可以不做響應,也可以做如下兩件事情——

        1. 給發送方回復一條響應(在本例中,TeacherActor會將一句名言回復給StudentActor)

        2. 將響應轉發給其它的目標受眾Actor,后者也可以進行響應/轉發/產生副作用。Router和Supervisor就是這種情況。

  • Akka筆記之配置及調度

   配置管理:applicaiton.conf

        調度器: 一次調度和循環調度。import context.dispatcher這條語句非常重要。schedule方法需要一個非常重要的隱式參數——ExecutionContext。schedule方法只是把消息發送封裝到了一個Runnable中,而它最終是由傳進來的ExecutionContext來執行的。

  • Akka筆記之生命周期

        preStart: Actor重啟的時候(比如說崩潰了之后重啟)通過調用preStart方法還能重新初始化。而構造方法則實現不了這點(只會初始化一次)。

        postStop: ActorSystem.stop(), ActorContext.stop(), PoisonPill 都可以終止一個actor,關閉時回調用postStop()

  • Akka筆記之子Actor及路徑

        Actor是純粹的分層結構。你所創建出來的Actor必定是某個Actor的子Actor。actorRef.path可以獲取到actor路徑。

        子Actor:當某個任務由一個或多個子任務所組成的時候通常就會創建子Actor。或者當某個任務由父Actor執行比較容易出錯,而你希望將它進行隔離的時候,也可以使用子Actor(這樣當子Actor崩潰的時候,你還能夠恢復它)。如果不存在父子Actor關系,就不要創建子Actor。

  • Akka筆記之Actor監控

        監控(Watch):不管Actor是怎么掛掉的,系統里面會有些Actor希望能夠知曉這一情況。ActorContext.watch和ActorContext.unwatch就是監控與取消監控的方法了。進行了監控之后,監控者會收到已停止的Actor發來的一條Terminated消息,它們只需要把這個消息放到receive函數的處理邏輯里就好了。 

        監督(Supervision):只存在於父子關系的actor之間。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM