关于Akka Typed中受监督Receive behavior返回新受监督Receive behavior的动机及场景验证问询
关于Akka Typed中受监督Receive behavior返回新受监督Receive behavior的动机及场景验证问询
各位Akka开发者们好,我之前在Akka用户论坛发过这个问题,现在想在这里再和大家探讨一下:
在Akka Typed中,为什么允许被监督的Receive行为返回一个新的、同样被监督的Receive行为?
举个例子:假设我们有一个被监督者S1装饰的Receive行为R1,在处理消息的过程中,R1返回了一个新的Receive行为R2,而R2又被另一个监督者S2装饰。Akka是支持这种操作的,但我在网上没找到类似的实际案例,这种模式感觉挺少见的——通常情况下,监督者只会对一个行为做一次装饰。所以我自己构思了两个可能的应用场景,想请大家帮忙看看逻辑是否合理,以及这些场景在实际开发中是否真的会出现。
场景1:不同行为阶段的专属异常处理
- R1在处理消息时只会抛出
Exception1,S1就是专门用来处理这个异常的监督者。 - 当R1执行到某个阶段返回R2后,R2的消息处理逻辑可能会抛出
Exception2。这时候原来的S1依然存在,但它只负责处理Exception1,无法处理Exception2,所以我们需要用S2来装饰R2,专门针对Exception2设置对应的监督策略。
这里我有个疑问:这个逻辑说得通吗?如果可行的话,为什么不直接让S1通过嵌套onFailure调用,同时处理Exception1和Exception2呢?
场景2:覆盖原有监督策略的特定异常规则
- R1在处理消息时可能抛出
Exception1和Exception2,S1通过嵌套onFailure调用,对这两种异常都采用重启的监督策略。 - 当R1返回R2后,我们希望针对
Exception2修改监督策略:把原来的重启改成恢复。这时候就可以用S2装饰R2,让S2对Exception2应用恢复策略。 - 正如我在Akka用户论坛看到的讨论,监督者的执行顺序是从内到外的,所以S2针对
Exception2的策略会优先于S1生效,相当于覆盖了原有规则。
我的问题
想问问大家,我这个思路方向对吗?上面这两种场景在实际的Akka开发中真的会遇到吗?
备注:内容来源于stack exchange,提问作者steddy
相关产品推荐
相关产品推荐

