3
와 GenServer를 다시 시작합니다비약 :이 전 <code>GenServer</code> 인스턴스가 있다고 가정 해 봅시다 특정 행동
defmodule MyModule do
use GenServer
def init(_) do
{:ok, %{}}
end
#...
end
내가 감독 인 MyModule을 원하지만 충돌 때 충돌 이전 상태로 다시 시작하기 전에, 뭔가를 할 :
defmodule MyModule do
use GenServer
def init(_) do
{:ok, %{}}
end
def init(:restart, previous_state) do
some_func(previous_state)
{:ok, previous_state}
end
#...
end
그러나 이것을 구현하는 방법을 모르겠다.
이전 상태가 자동으로 다시 시작됩니다. – Dogbert
그 상태로 무엇을하고 싶습니까? 로깅과 별개로 동일한 genserver가 재사용하는 유스 케이스를 상상할 수는 없습니다. 이전 상태로 인해 충돌이 발생했습니다. 비슷한 메시지가 나타나면 즉시 다시 충돌하지 않겠습니까? 크래시가 관리자에게 오류 메시지를 보냅니다. 당신은 아마 그것을 잡을 수 있고 그것으로 무언가를 할 수 있습니다. 그렇지 않으면 Dogbert가 제안한 방법을 사용하여 상태를 어딘가에 저장하고 다시 시작할 때 genserver가 상태를로드하게 만듭니다. – Johannes
@Johannes 내 경우에는 상태가 크래시 자체를 유발할 수 있다고 말하고 싶지만이 상태에 유효한 호출을 적용하지 않으면 예외가 발생합니다. –