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

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 【Seata】分布式事务框架Seata踩坑集锦

技术交流

有想进滴滴LogI开源用户群的加我个人微信: jjdlmn_ 进群(备注:进群)

群里面主要交流 kakfa、es、agent、LogI-kafka-manager、等等相关技术;

群内有专人解答你的问题

对~ 相关技术领域的解答人员都有; 你问的问题都会得到回应


坑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 ;


image.png

image.png

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

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

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

image.png

注册成功之后看看redis的值

image.png

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

image.png

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

image.png

坑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>

image.png

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

同理 如果用的是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没有被执行到

image.png

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

image.png

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


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

image.png

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

@DependsOn({BEAN_NAME_SPRING_APPLICATION_CONTEXT_PROVIDER, BEAN_NAME_FAILURE_HANDLER})

image.png

但是,没有必要手动配置


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


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

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

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


io.seata.common.exception.FrameworkExc

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

image.png

解决方案 :把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

image.png

解决方案:加入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>


image.png

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
15天前
|
存储 人工智能 PyTorch
基于PyTorch/XLA的高效分布式训练框架
基于PyTorch/XLA的高效分布式训练框架
25 2
|
1月前
|
人工智能 算法 PyTorch
TorchAcc:基于 TorchXLA 的分布式训练框架
阿里云研究员、阿里云人工智能平台 PAI 技术负责人--林伟在GTC 2024 大会 China AI Day 线上中文演讲专场上介绍了TorchAcc,这是一个基于 PyTorch/XLA 的大模型分布式训练框架。
|
1月前
|
SQL 弹性计算 分布式计算
TiDB计算层详解:分布式计算框架与查询优化机制
【2月更文挑战第26天】本文将深入剖析TiDB的计算层,详细解析其分布式计算框架和查询优化机制。通过了解计算层的核心组件和工作原理,我们可以更好地理解TiDB如何高效处理SQL查询和计算任务。本文将从计算层的架构、任务分发、查询优化等方面展开介绍,帮助读者全面掌握TiDB计算层的关键技术和优势。
|
2月前
|
消息中间件 Kafka Apache
Apache Flink 是一个开源的分布式流处理框架
Apache Flink 是一个开源的分布式流处理框架
482 5
|
28天前
|
消息中间件 算法 Java
【亿级数据专题】「分布式服务框架」 盘点本年度我们探索服务的保障容量的三大关键方案实现
【亿级数据专题】「分布式服务框架」 盘点本年度我们探索服务的保障容量的三大关键方案实现
187 0
|
2月前
|
监控 负载均衡 Dubbo
Dubbo 框架揭秘:分布式架构的精髓与魔法【一】
Dubbo 框架揭秘:分布式架构的精髓与魔法【一】
162 0
|
1月前
|
NoSQL Java Redis
分布式锁框架Lock4j简单使用
最近项目中使用到了Lock4j的分布式锁组件,小编今天就带大家学习一下该框架,以及如何在我们项目中进行集成使用。
|
1月前
|
SQL 关系型数据库 数据库
学习分布式事务Seata看这一篇就够了,建议收藏
学习分布式事务Seata看这一篇就够了,建议收藏
|
1月前
|
运维 监控 Java
推荐一款好用的Java分布式任务调度框架!
推荐一款好用的Java分布式任务调度框架!
168 0
|
2月前
|
关系型数据库 MySQL 数据库
分布式事务Seata
分布式事务Seata