我们正在为项目使用Arjuna / Narayana XA事务支持,因此我们可以同时拥有一个跨多个数据库的单个分布式事务。
我们的一个数据库是MySQL。与许多其他数据库一样,当检测到乐观锁定错误时,MySQL会抛出某种类型的错误,应用程序应将其解释为“由于乐观锁定导致您的事务失败,但如果您再试一次它可能会成功,那么为什么你不这样做吗?“
在使用XA之前,这不是问题,因为在发生乐观锁定失败时很容易重试事务 - 只需检查异常类型,并在适当时重试。
然而,现在,Arjuna将乐观锁定错误视为致命错误,就像任何其他错误一样,并且我们的代码无法在整个XA事务之外知道如果重试XA事务可能会成功(异常)两种方式都是一样的。)
我们不想重试每个失败的事务,只重试因乐观锁定而失败的事务。但我们无法区分它们。
有没有人遇到过XA事务的问题场景,如果有,你是怎么解决的?