亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Akka:DeathPactException 總是一個編程錯誤嗎?

Akka:DeathPactException 總是一個編程錯誤嗎?

MMTTMM 2021-05-31 15:10:09
我偶爾會在我的項目中使用 Akka.NET,所以我知道這項技術,可以用它做一些事情,但不認為自己是專家。雖然我使用 .NET,但熟悉 JVM 上 Akka 的人肯定可以回答這個問題。最近,我偶然看到了DeathPactException一個應用程序的日志文件。原因是一個演員(演員 A1)觀看了另一個演員(A2),這是它自己開始的。但是,A1 沒有處理TerminatedA2 發送的消息。這是由于 A2 在執行其任務后實際上停止了自己造成的。多虧了合理定義的主管層次結構等,系統本身運行得很好:A1 被它的主管立即重新啟動。實際上是否有任何場景,一個演員會.Watch()另一個演員,然后忽略該Terminated消息?或者臭名昭著的DeathPactException基本上總是應用程序代碼中的錯誤,類似于NullReferenceException/ NullPointerException?
查看完整描述

1 回答

?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

ADeathPactException不一定表示編程錯誤。

故意不處理Terminated消息是一種在該演員的任何一個孩子正常停止時停止所有該演員的孩子的方法。事件順序如下:

  1. Actorparent監視其所有子代 、c1、c2c3,但不處理Terminated消息。

  2. 孩子c2正常停止。

  3. parent拋出 a DeathPactException,這會導致parent重新啟動(這是默認的主管策略,可以在parent的主管/父級中覆蓋)。

  4. parentpreRestart鉤子被調用,默認情況下會停止所有parent的孩子。

選擇不處理Terminated消息實際上是為非異常(即,不響應故障)情況制定全面停止策略的一種手段。


查看完整回答
反對 回復 2021-06-02
  • 1 回答
  • 0 關注
  • 161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號