akka 2.3.13です。
preRestartの中のどの位置でsuper.preRestart(..)
を呼ぶかによって微妙に処理の順番が変わって辛かったのでメモします。
コメントのとおりですが、
最初にsuper.preRestart
を呼ぶとpreStart -> postStop -> preRestart
最後にsuper.preRestart
を呼ぶとpreStart -> preRestart -> postStop
の順番で処理されるようです。
これはclass ActorのpreRestartの実装の中でpostStopメソッドを呼んでいることが原因です。 つまり下記コメントの一でpostStopが呼ばれています。
override def preRestart(reason: Throwable, message: Option[Any]): Unit = { super.preRestart(reason, message) // <-- ここでpostStopが呼ばれている println("preRestart")
当然super.preRestart(..)
の位置をずらしてしまったら先にpreRestartの処理が走ってしまいます(◞‸◟)
さらに選択肢としてはsuper.preRestart
を呼ばないことにより「postStopを処理しない」みたいなことも可能です。
postStopを呼ばない動機はよく分かりませんが、前回の記事で
super.postRestartを呼ばないことによりpreStartを処理しないみたいなパターンが出てきたので、それと同じような応用法があるかもしれません。
言われてみれば当たり前ですがちょっと柔軟すぎる気がするんですがなれたらいい感じなんですかね(´;ω;`)