servicecomb-pack
servicecomb-pack copied to clipboard
omega执行补偿命令失败,alpha命令状态处于pending状态,无法自愈自动重试吗
omega的补偿命令本身是可能执行失败的,alpha端命令的状态处于pending状态,此时服务端不会重新下发命令,但是客户端执行失败是有可能整个服务crash,最后也无法本地重试。最后会导致整个补偿事务一直pending。
你认为这种情况,alpha 有什么别的方法吗?
如果整个事务有超时设置的话,当超时时间到达以后,alpha标记该事务为SUSPENDED,后续需要人工处理。
这个时候的确需要人工确认,Alpha端很难给出自动的解决方案。
你认为这种情况,alpha 有什么别的方法吗?
补偿也应该有个超时策略吧,超过阈值,要不挂起事务,要不就重发命令,目前应该就只能等待整体事务超时,然后挂起事务。
omega的补偿命令本身是可能执行失败的,alpha端命令的状态处于pending状态,此时服务端不会重新下发命令,但是客户端执行失败是有可能整个服务crash,最后也无法本地重试。最后会导致整个补偿事务一直pending。
我印象中补偿注解 @Compensable 有一个参数 retries 可以控制重试次数,非状态机模式下我没有验证过。 在状态机模式下应该是超过重试次数后会吧这笔事物设置成挂起状态。
你可以在这个文件找到 retries 的定义 https://github.com/apache/servicecomb-pack/blob/master/omega/omega-transaction/src/main/java/org/apache/servicecomb/pack/omega/transaction/annotations/Compensable.java