1,有控制台看到我的失败 重试中的任务列表吗? 2,重试的间隔时间如何配置 3,重试任务是否持久化了?
[seata]saga模式的补偿失败
回答
1、控制台还没有根据状态筛选数据的功能,正在规划中。 2、重试策略,暂不支持,正在规划中。 3、重试任务持久化指的是任务日志吗?目前是在定时任务根据状态进行相应处理而已。暂未使用任务调度框架。
1,补偿重试中 列表 2,补偿重试是有的。我看是 2秒重试间隔。 3,补偿任务 会持久化吗
3,比如我 正向失败了t3, 现在需要补偿c3 c2 c1。这时系统stop了。 c3 c2 c1 会持久化吗?下次strat的时候继续执行c3 c2 c1.
- 重试中,也只是全局事务的状态之一,到时候会添加根据状态筛选数据的功能的。
- 重试当然有,这我知道。我说的是它需要补偿策略来提供灵活的可配置化功能。而不是固定的每隔2秒重试一次。
- 各节点的持久化本来就是有的,在client端保存着的。
有什么文档吗。我在官网的资料还没看到有控制台。
3,在client端保存,那我是不是需要 在docker中 保留这个文件夹。
控制台是针对server端的,从1.5.0开始的新特性,还没有贡献者来持续输出其说明文档。主要目前功能也还很少。
saga模式,除了全局事务注册并保存一份在server端外,其他的数据全部保存在了client端。默认情况下节点数据也不会上报server。所以,server控制台不是很好去管理saga。
未来,saga的流程设计器应该是会集成在server端的。并且对应的流程都可以在server端进行管理。类似于工作流一样。
那 如果 执行事务时,进程挂了,进程restart后,会 继续恢复之前的事务执行吗。
全局事务超时后,会进行补偿处理。
你可以在本地测试一下。
我编写了一个,一个 正向 会异常,补偿也异常的 调用。 执行后,会2s 补偿重试。
我把client stop后,再start。 不会再补偿重试了。
@Override
public boolean reduce(String businessKey, int count) {
LOGGER.warn("reduce inventory succeed, count: " + count + ", businessKey:" + businessKey);
throw new RuntimeException("121212");
// return false;
}
@Override
public boolean compensateReduce(String businessKey) {
LOGGER.warn("compensate reduce inventory succeed, businessKey:" + businessKey);
// return false;
throw new RuntimeException("121212a");
}
你看下server端有没有报错。
循环补偿时, will retry later.
stop后 ,will retry later.+RM channels is empty.
应该是RPC连接问题。过一段时间应该会自行恢复的。
你使用的是哪个版本?