3.undo_log表log_status=1的记录是做什么用的?
7.Nacos 作为 Seata 配置中心时,项目启动报错找不到服务。如何排查,如何处理?
8.Eureka做注册中心,TC高可用时,如何在TC端覆盖Eureka属性?
11.io.seata.codec.protobuf.generated不存在,导致seata server启动不了?
15.是否可以不使用conf类型配置文件,直接将配置写入application.properties?
19. apache-dubbo 2.7.0出现NoSuchMethodError ?
21. win系统使用同步脚本进行同步配置时为什么属性会多一个空行?
22. AT 模式和 Spring @Transactional 注解连用时需要注意什么 ?
23. Spring boot 1.5.x 出现 jackson 相关 NoClassDefFoundException ?
25. 使用mybatis-plus 动态数据源组件后undolog无法删除 ?
A: 0.4.2版本之后就可以上生产环境,欢迎已经在使用的企业参与此issue:who's using Seata
A: 0.6版本开始支持,tc使用db模式共享全局事务会话信息,注册中心使用非file的seata支持的第三方注册中心
A:
A: 因seata一阶段本地事务已提交,为防止其他事务脏读脏写需要加强隔离。
A:
注:建议事前做好隔离保证无脏数据
A:
1. 分支事务是异步,全局事务无法感知它的执行进度,全局事务已进入二阶段,该异步分支才来注册
2. 服务a rpc 服务b超时(dubbo、feign等默认1秒超时),a上抛异常给tm,tm通知tc回滚,但是b还是收到了请求(网络延迟或rpc框架重试),然后去tc注册时发现全局事务已在回滚
3. tc感知全局事务超时(@GlobalTransactional(timeoutMills = 默认60秒)),主动变更状态并通知各分支事务回滚,此时有新的分支事务来注册
A: 异常:io.seata.common.exception.FrameworkException: can not register RM,err:can not connect to services-server.
注:1.080版本启动指定ip问题,出现异常Exception in thread "main" java.lang.RuntimeException: java.net.BindException: Cannot assign request address,请升级到081以上版本
2.项目使用jdk13,启动出现
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
如环境为sh,替换脚本中最后一段:
exec "$JAVACMD" $JAVA_OPTS -server -Xmx2048m -Xms2048m -Xmn1024m -Xss512k -XX:SurvivorRatio=10 -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:MaxDirectMemorySize=1024m -XX:-OmitStackTraceInFastThrow -XX:-UseAdaptiveSizePolicy -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="$BASEDIR"/logs/java_heapdump.hprof -XX:+DisableExplicitGC -XX:+CMSParallelRemarkEnabled -XX:+
UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 -verbose:gc -Dio.netty.leakDetectionLevel=advanced \
-classpath "$CLASSPATH" \
-Dapp.name="seata-server" \
-Dapp.pid="$$" \
-Dapp.repo="$REPO" \
-Dapp.home="$BASEDIR" \
-Dbasedir="$BASEDIR" \
io.seata.server.Server \
"$@"
A:
在seata\conf目录下新增eureka-client.properties文件,添加要覆盖的Eureka属性即可。
例如,要覆盖eureka.instance.lease-renewal-interval-in-seconds和eureka.instance.lease-expiration-duration-in-seconds,添加如下内容:
eureka.lease.renewalInterval=1
eureka.lease.duration=2
属性前缀为eureka,其后的属性名可以参考类com.netflix.appinfo.PropertyBasedInstanceConfigConstants,也可研究seata源码中的discovery模块的seata-discovery-eureka工程
A: undolog序列化配置为jackson时,jackson版本需要为2.9.9+
A:
方案1.需要修改mybatis的配置: 在@Options(useGeneratedKeys = true, keyProperty = "id")
或者在xml中指定useGeneratedKeys 和 keyProperty属性
方案2.删除undo_log表的id字段
A:
本地执行下: ./mvnw clean install -DskipTests=true
(Mac,Linux) 或 mvnw.cmd clean install -DskipTests=true
(Win), 参考issues/2438,相关代码在0.8.1已经移除。
A: 1.修改file.conf的驱动配置store.db.driver-class-name; 2.lib目录下删除mysql5驱动,添加mysql8驱动
ps: oracle同理;1.2.0支持mysql驱动多版本隔离,无需再添加驱动
A: 暂时只支持mysql,其他类型数据库建议先建一列自增id主键,原复合主键改为唯一键来规避下
A:
异常1:ClassCastException: com.sun.proxy.$Proxy153 cannot be cast to com.zaxxer.hikari.HikariDataSource
原因: 自动代理时,实例类型转换错误,注入的是$Proxy153实例,不是HikariDataSource的本身或子类实例。
解决: seata自动代理数据源功能使用jdk proxy, 对DataSource进行代理,生成的代理类 extends Proxy implements DataSource, 接收方可改成DataSource接收实现。
1.1.0将同时支持jdk proxy和cglib,届时该问题还可切换cglib解决。
A: 目前seata-all是需要使用conf类型配置文件,后续会支持properties和yml类型文件。当前可以在项目中依赖seata-spring-boot-starter,然后将配置项写入到application .properties 这样可以不使用conf类型文件。
A:
1. 删除 distribution 模块的bin、conf和lib目录。
2. ./mvnw clean install -DskipTests=true(Mac,Linux) 或 mvnw.cmd clean install -DskipTests=true(Win) -P release-seata。
3. 在 distribution 模块的 target 目录下解压相应的压缩包即可。
A:
1. AT 模式支持Dubbo、Spring Cloud、Motan、gRPC 和 sofa-RPC。
2. TCC 模式支持Dubbo、Spring Cloud和sofa-RPC。
A:
需要将druid的依赖版本升级至1.1.12+ 版本,Seata内部默认依赖的版本是1.1.12(provided)。
A:
由于apache-dubbo 在加载Filter时,会将 alibaba-dubbo 的filter一并加载且 2.7.0 版本com.alibaba.dubbo.rpc.Invoker中
Result invoke(org.apache.dubbo.rpc.Invocation invocation) throws RpcException;
误使用了org.apache.dubbo.rpc.Invocation来入参(2.7.1修复),导致出现
java.lang.NoSuchMethodError: com.alibaba.dubbo.rpc.Invoker.invoke(Lcom/alibaba/dubbo/rpc/Invocation;)Lcom/alibaba/dubbo/rpc/Result;
所以请升级dubbo到2.7.1及以上,保证兼容.本身是alibaba-dubbo可放心使用,alibaba-dubbo并不包含apache-dubbo的包。
参考链接:issue,PR
A:
A:
目前是知道为什么配置会有个\r,大概是因为这个文件你是在win编写的,所以有换行符为\r\n,然后你用git bash执行(这个可认为是linux)只认\n换行,所以就多了\r 解决办法目前有两个: 1、sed -i ""s/\r//"" config.txt 2、vim 进入文本,再用命令 set fileformat=unix(亲测可用)
A:
@Transactional 可与 DataSourceTransactionManager 和 JTATransactionManager 连用分别表示本地事务和XA分布式事务,大家常用的是与本地事务结合。当与本地事务结合时,@Transactional和@GlobalTransaction连用,@Transactional 只能位于标注在@GlobalTransaction的同一方法层次或者位于@GlobalTransaction 标注方法的内层。这里分布式事务的概念要大于本地事务,若将 @Transactional 标注在外层会导致分布式事务空提交,当@Transactional 对应的 connection 提交时会报全局事务正在提交或者全局事务的xid不存在。
A:
Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.fasterxml.jackson.databind.ObjectMapper
目前发现在 Spring Boot 1.5.x 版本中原始引入的 jackson 版本过低,会导致 Seata 依赖 jackson 的新特性找不到,Seata 要求 jackson 版本2.9.9+,但是使用 jackson 2.9.9+ 版本会导致Spring Boot中使用的jackson API找不到,也就是jackson本身的向前兼容性存在问题。因此,建议大家将Seata的序列化方式切换到非 jackson 序列化方式,比如 kryo,配置项为client.undo.logSerialization = "kryo"
A:
1.首先确保你引入了spring-cloud-alibaba-seata的依赖.
2.如果xid还无法传递,请确认你是否实现了WebMvcConfigurer,如果是,请参考com.alibaba.cloud.seata.web.SeataHandlerInterceptorConfiguration#addInterceptors的方法.把SeataHandlerInterceptor加入到你的拦截链路中.
A:
dynamic-datasource-spring-boot-starter 组件内部开启seata后会自动使用DataSourceProxy来包装DataSource,所以需要以下方式来保持兼容
1.如果你引入的是seata-all,请不要使用@EnableAutoDataSourceProxy注解.
2.如果你引入的是seata-spring-boot-starter 请关闭自动代理
seata:
enable-auto-data-source-proxy: false