多服务+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”;