前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Seata】分布式事务框架Seata踩坑集锦

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

作者头像
石臻臻的杂货铺[同名公众号]
发布2021-07-14 10:22:22
6K0
发布2021-07-14 10:22:22
举报
文章被收录于专栏:kafka专栏

推荐一款非常好用的kafka管理平台,kafka的灵魂伴侣 滴滴开源Logi-KafkaManager 一站式Kafka监控与管控平台


技术交流

有想进滴滴LogI开源用户群的加我个人微信: jjdlmn_ 进群(备注:进群) 群里面主要交流 kakfaesagentLogI-kafka-manager、等等相关技术; 群内有专人解答你的问题 对~ 相关技术领域的解答人员都有; 你问的问题都会得到回应

有想进 滴滴LogI开源用户群 的加我个人微信: jjdlmn_ 进群(备注:进群) 群里面主要交流 kakfa、es、agent、以及其他技术 群内有专人解答疑问,你所问的都能得到回应



坑1 no available service ‘default’ found

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

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

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

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

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

注册成功之后看看redis的值

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

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


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

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

代码语言:javascript
复制
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包的时候都是 provide

说明我们要引入对应的依赖才行; 按需引入; 同理 如果用的是Redis的注册中心也要引入redis的客户端

代码语言:javascript
复制
            com.alibaba.nacos
            nacos-client
            1.3.0
        

        
        
            redis.clients
            jedis
            2.9.0

坑3 NotSupportYetException: not support register type: null

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

代码语言:javascript
复制
 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-spring-boot-starter方式启动的;然后又手贱配置了GlobalTransactionScanner

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

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

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

代码语言:javascript
复制
@DependsOn({BEAN_NAME_SPRING_APPLICATION_CONTEXT_PROVIDER, BEAN_NAME_FAILURE_HANDLER})

但是,没有必要手动配置

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


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

之前一直好好的,过几天启动就报这个错了,后来我看了一下注册中心,注册了好几个ip; 都是之前注册过的,不知道为啥没有被清理;

代码语言:javascript
复制
io.seata.common.exception.FrameworkException: 
can not register RM,err:can not connect to services-server.

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


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

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

代码语言:javascript
复制
java.lang.NoClassDefFoundError: 
Could not initialize class io.seata.rm.datasource.undo.UndoLogParserFactory$SingletonHolder

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

代码语言:javascript
复制
java.lang.NoClassDefFoundError: 
com/fasterxml/jackson/databind/ObjectMapper

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

代码语言:javascript
复制
            com.fasterxml.jackson.core
            jackson-databind
            2.11.0

欢迎 Star和 共建由 滴滴开源的kafka的管理平台,非常优秀非常好用的一款kafka管理平台

满足所有开发运维日常需求

滴滴开源Logi-KafkaManager 一站式Kafka监控与管控平台

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/06/21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 技术交流
  • 坑1 no available service ‘default’ found
  • 坑2 com.alibaba.nacos.api.exception.NacosException
  • 坑3 NotSupportYetException: not support register type: null
  • 坑4 can not register RM,err:can not connect to services-server.
  • 坑5 Could not initialize class io.seata.rm.datasource.undo.UndoLogParserFactory$SingletonHolder
相关产品与服务
云数据库 Redis®
腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档