アッカJavaはこちら。私は 2 つのアクター と を持っていParent
ますChild
。前者は後者の親です。Child
特定の例外 (たとえば、 ) をスローする場合UnrulyTeenagerExcepton
、私が探している動作は次のとおりです。
- は、例外がスローされたとき
Parent
に処理されていたメッセージへの参照を保存します。Child
それから Child
が再起動され、永続化されたメッセージが に「再生」されChild
ます。しかし- この保存 -> 再起動 -> 再生サイクルが 3 回発生し、
Child
スローがUnrulyTeenagerException
3回発生した場合、SupervisorStrategy.escalate()
これまでの私の最善の試み:
// Groovy pseudo-code
class ChildFailureDecider extends Function<Throwable,Directive> {
int maxRetries = 3
int numRetries = 0
@Override
Directive apply(Throwable childFailure) {
if(childFailure instanceof UnrulyTeenagerException) {
numRetries++
if(numRetries <= maxRetries) {
// TODO: #1 How to persist the message that caused the ‘childFailure’?
return SupervisorStrategy.restart()
// TODO: #2 How to ‘play back’ the persisted message to Child?
}
}
SupervisorStrategy.escalate()
}
}
しかし、ご覧のとおり、メッセージの永続性と再生に苦労しています。何か案は?Java コード サンプルは非常に高く評価されています。Akka は、Scala の象形文字を学習しなくても十分に頑丈です。