when there is some problem(e.g. db Exception,biz Exception) in an Actor, I hope the actor can throw exception in which some detail error message included to it’s supervisor. The supervisor then can perform diffrent strategy(not just akka strategy,but also include some logic I custom) according to the error message.
In akka.actor.typed.SupervisorStrategy, I can obtain the exception instance in the below way :
strategy =
new OneForOneStrategy(maxRetry, withinTimeRange,
DeciderBuilder
.match(ArithmeticException.class, e -> SupervisorStrategy.resume())
.match(NullPointerException.class, e -> SupervisorStrategy.restart())
.match(IllegalArgumentException.class, e -> SupervisorStrategy.stop())
.matchAny(o -> SupervisorStrategy.escalate())
.build());
but in the akka.actor.typed.SupervisorStrategy,the demo code like this:
That is not supported. The design intention is that there shouldn’t be a need for other logic than the exception class. In classic we saw examples of all kind of imperative logic (side effects and such) in the custom supervisor strategy.
Thank you for your reply! We used to use the classic akka,and in the cusome supervisor strategy(which maybe you don’t hope too much logic in it), we usually do something like printing log(including the message and the error),sending mail,recording message so that we can retry it after we repair the promlem.Can you help me to find some other place where can put these logics in? And how can I obtain the source message and the exception source message caused when an exception happend?
By the way, do you have more demo code or more practice code about the akka supervisor or monitor as reference?
sorry to bother you,from an akka noob and an english noob :-)
Have you attempted to make the exceptions part of your business logic? You can associate one or more events with a particular exception depending on how your logic handles the exception. You can perform logging, queue events to allow the actor to retry, or create projections that handle these events to send mail.