日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Akka的Hello World(三)Actor失败处理

發布時間:2025/3/19 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Akka的Hello World(三)Actor失败处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

父母和孩子在整個生命周期中都是相互聯系的。每當一個actor失敗(拋出異?;蛭刺幚淼漠惓?#xff09;時,它會暫時中止。如前所述,失敗信息將傳播到父級,然后父級決定如何處理子actor引起的異常。通過這種方式,父母可以擔任孩子的監督員。默認的策略是停止并重新啟動孩子。如果不更改默認策略,則所有失敗都會導致重新啟動。

讓我們在一個簡單的實驗中觀察默認策略。

(一)創建maven工程,添加依賴

<dependencies><dependency><groupId>com.typesafe.akka</groupId><artifactId>akka-actor_2.12</artifactId><version>2.5.22</version></dependency></dependencies>

(二)編寫代碼

import akka.actor.AbstractActor; import akka.actor.AbstractActor.Receive; import akka.actor.ActorRef; import akka.actor.ActorSystem; import akka.actor.Props;class SupervisingActor extends AbstractActor {static Props props() {return Props.create(SupervisingActor.class, SupervisingActor::new);}ActorRef child = getContext().actorOf(SupervisedActor.props(), "supervised-actor");@Overridepublic Receive createReceive() {return receiveBuilder().matchEquals("failChild",f -> {child.tell("fail", getSelf());}).build();} }class SupervisedActor extends AbstractActor {static Props props() {return Props.create(SupervisedActor.class, SupervisedActor::new);}@Overridepublic void preStart() {System.out.println("supervised actor started");}@Overridepublic void postStop() {System.out.println("supervised actor stopped");}@Overridepublic Receive createReceive() {return receiveBuilder().matchEquals("fail",f -> {System.out.println("supervised actor fails now");throw new Exception("I failed!");}).build();} } public class ActorHierarchyExperiments {public static void main(String[] args) throws java.io.IOException {ActorSystem system = ActorSystem.create("testSystem");ActorRef supervisingActor = system.actorOf(SupervisingActor.props(), "supervising-actor");supervisingActor.tell("failChild", ActorRef.noSender());} }

(三)運行測試?

?

(四)分析

我們看到失敗后,受監督的Actor被停止并立即重新啟動。我們還看到一個日志條目,報告了處理的異常,在本例中是我們的測試異常。在這個例子中,我們使用preStart()和postStop(),它們的默認重新啟動之前和結束之后被調用,所以我們不能從Actor內部區分首次啟動或重啟。這通常正確的做法是,重新啟動的目的是將Actor設置為已知良好狀態,這通常意味著一個干凈的起始階段。實際發生的是,雖然在preRestart()和postRestart()方法被調用,如果不重寫,默認情況下分別委托postStop()和preStart()。您可以嘗試覆蓋這些其他方法,并查看輸出如何更改。?

總結

以上是生活随笔為你收集整理的Akka的Hello World(三)Actor失败处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。