我有幾個gen_server
工作人員定期向硬件傳感器請求一些信息。傳感器可能暫時失效,這是正常的。如果傳感器失敗,工人將終止併發生異常。Erlang主管。重啓過程中,如果失敗幾次,放棄併發送消息
所有的工人都是從simple_one_to_one
策略中派生出來的。此外,我有一個控制gen_server
,它可以啓動和停止工作人員,也可以收到'DOWN'
消息。
所以現在我有兩個問題:
如果工人被監督者的狀態丟失,這是不能接受我重新啓動。我需要用相同的狀態重新創建工人。
如果工作人員在一段時間內失敗了幾次,傳感器發生了嚴重的問題,需要操作員注意。因此,我需要放棄重新啓動worker並向事件處理程序發送消息。但是監控器的默認行爲在排氣過程重啓限制後終止。
我看到兩個解決方案:
設置過程中導師的類型爲臨時和控制他們,在控制
gen_server
重新啓動它們。但這正是主管應該做的,所以我正在重新發明輪子。爲主監督員下的每個工作人員創建監督員。這完全解決了我的第二個問題,但重啓後工作人員的狀態丟失了,因此我需要一些存儲工具狀態的ets表。
我對Erlang很新,所以我需要一些建議來解決我的問題,至於哪個(如果有的話)解決方案是最好的。提前致謝。
此主題將回答您的大部分查詢。基本上,主管不會存儲行爲狀態,相反你必須親自處理。 http://stackoverflow.com/questions/6881075/will-data-in-gen-server-be-kept-after-restarted-by-its-supervisor – 2012-03-28 08:17:25