0
点赞
收藏
分享

微信扫一扫

【Seata】分布式事务框架Seata踩坑集锦

坑1 no available service ‘default’ found

​i.s.c.r.netty.NettyClientChannelManager : no available service 'null' found, please make sure registry config correct​

​no available service 'default' found, please make sure registry config correct​

这个问题的原因是没有找到 seata-server ;

【Seata】分布式事务框架Seata踩坑集锦_java

1.确认自己seata-server启动了

2.确认客户端启动的时候连接配置是正确的

例如:​​seata-server​​选择的注册中心是redis; ​​配置 cluster=default​

【Seata】分布式事务框架Seata踩坑集锦_spring_02

注册成功之后看看redis的值

【Seata】分布式事务框架Seata踩坑集锦_spring_03

确认客户端的配置是正确的

【Seata】分布式事务框架Seata踩坑集锦_spring_04

如果上面都正确,但是还是有问题,请确认一下自己是不是手动配置了 ​​GlobalTransactionScanner​​,确认一下配置的txServiceGroup参数是否跟跟配置一样;如下

【Seata】分布式事务框架Seata踩坑集锦_kafka_05

坑2 com.alibaba.nacos.api.exception.NacosException

Seata 使用注册中心的时候用的是Nacos,启动报错

Caused by: java.lang.ClassNotFoundException: com.alibaba.nacos.api.exception.NacosException
at java.net.URLClassLoader.findClass(URLClassLoader.java:382) ~[na:1.8.0_221]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_221]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) ~[na:1.8.0_221]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_221]
... 39 common frames omitted

Seata-All 在引入相应的jar包的时候都是 ​​<scope>provide</scope>​

【Seata】分布式事务框架Seata踩坑集锦_java_06

说明我们要引入对应的依赖才行; 按需引入;

同理 如果用的是Redis的注册中心也要引入redis的客户端

<!-- 如果注册中心选择的是nacos  需要引入下面的包-->
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.3.0</version>
</dependency>

<!-- 如果注册中心选择了redis 则需要依赖下面的-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>

坑3 NotSupportYetException: not support register type: null

在引入seata的过程中,启动的时候报如下的错误

nested exception is io.seata.common.exception.NotSupportYetException: 
not support register type: null
io.seata.common.exception.ShouldNeverHappenException:
Can't find any object of class org.springframework.context.ApplicationContext

他的原因就是SpringApplicationContextProvider没有被执行到

【Seata】分布式事务框架Seata踩坑集锦_seata_07

因为我的是用​​seata-spring-boot-starter​​方式启动的;然后又手贱配置了​​GlobalTransactionScanner​

【Seata】分布式事务框架Seata踩坑集锦_kafka_08

那么这个​​GlobalTransactionScanner​​开始加载的时候,​​SpringApplicationContextProvider​​并没有被执行;​​GlobalTransactionScanner​​需要依赖于​​SpringApplicationContextProvider​​, 所以报错了

解决方法: seata-spring-boot-starter方式启动已经自动加载了​GlobalTransactionScanner​​SeataAutoConfiguration​

【Seata】分布式事务框架Seata踩坑集锦_kafka_09

如果一定要自己手动加载的话 ,请加上注解

@DependsOn({BEAN_NAME_SPRING_APPLICATION_CONTEXT_PROVIDER, BEAN_NAME_FAILURE_HANDLER})

【Seata】分布式事务框架Seata踩坑集锦_kafka_10

但是,没有必要手动配置

​配置 GlobalTransactionScanner,使用 seata-all 时需要手动配置,使用 seata-spring-boot-starter 时无需额外处理。​

坑4 can not register RM,err:can not connect to services-server.

之前一直好好的,过几天启动就报这个错了,后来我看了一下注册中心,注册了好几个ip;

都是之前注册过的,不知道为啥没有被清理;

io.seata.common.exception.FrameworkException: 
can not register RM,err:can not connect to services-server.

【Seata】分布式事务框架Seata踩坑集锦_java_11

解决方案 :把key删掉重新启动 seata-server

坑5 Could not initialize class io.seata.rm.datasource.undo.UndoLogParserFactory$SingletonHolder

接入Seata的时候 有报下面的错误

java.lang.NoClassDefFoundError: 
Could not initialize class io.seata.rm.datasource.undo.UndoLogParserFactory$SingletonHolder

表面上看起来是那个异常,但是你打个断点进去查看会发现最终的异常是下面这个

java.lang.NoClassDefFoundError: 
com/fasterxml/jackson/databind/ObjectMapper

【Seata】分布式事务框架Seata踩坑集锦_spring_12

解决方案:加入jackson-databind依赖就行

<!-- undo序列化方式 选择了哪个就要依赖哪个jar包-->
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.0</version>
</dependency>


【Seata】分布式事务框架Seata踩坑集锦_java_13



举报

相关推荐

0 条评论