springcloud+seata + sharding-proxy分表分库插入语句失败

多服务+proxy怎么保持事务的一致性?

使用环境:

springcloud
seata-all 1.4.2
sharding-proxy使用的5.3.0

场景、问题:

目前服务A加入seata分布式事务,数据库链接为proxy,其中proxy依据表t_user、字段user_id做了分片处理
在进行insert 表(分片)的时候会报错,错误如下:
ERROR 8536 — [io-51000-exec-2] i.s.r.d.s.s.c.AbstractTableMetaCache : [202304270214186941173151450267720] get table meta of the table t_user error: Failed to fetch schema of t_user

因为seata-all包中MysqlTableMetaCache.fetchSchema方法里会执行如下sql语句
String sql = “SELECT * FROM " + ColumnUtils.addEscape(tableName, “mysql”) + " LIMIT 1”;
proxy又会有分片的dml限制(dml必须加上分片规则语句,where user_id = ?),
请问我该怎么处理服务中的seata或者处理sharding-proxy?

试了sharding-proxy + seata, springcloud不加入seata,但是应用之间的事务就没法保持一致性
比如服务A(mysql)调用服务B(proxy分片)后服务A抛错,服务B(proxy)没有回滚
多服务+proxy怎么保持事务的一致性?

是否需要改seata源码?
String sql = “/* SHARDINGSPHERE_HINT: DISABLE_AUDIT_NAMES=sharding_key_required_auditor */ SELECT * FROM " + ColumnUtils.addEscape(tableName, “mysql”) + " LIMIT 1”;

已进行操作:

现状:

问题已解决
分片规则将auth注了

defaultAuditStrategy:

auditorNames:

- sharding_key_required_auditor

allowHintDisable: false

京ICP备2021015875号