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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
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
相关文章
|
7天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
34 2
|
18天前
|
消息中间件 SQL 中间件
大厂都在用的分布式事务方案,Seata+RocketMQ带你打破10万QPS瓶颈
分布式事务涉及跨多个数据库或服务的操作,确保数据一致性。本地事务通过数据库直接支持ACID特性,而分布式事务则需解决跨服务协调难、高并发压力及性能与一致性权衡等问题。常见的解决方案包括两阶段提交(2PC)、Seata提供的AT和TCC模式、以及基于消息队列的最终一致性方案。这些方法各有优劣,适用于不同业务场景,选择合适的方案需综合考虑业务需求、系统规模和技术团队能力。
132 7
|
1月前
|
消息中间件 数据库
Seata框架的工作原理
你还可以进一步深入研究 Seata 框架的技术细节和具体实现,以更好地理解其工作原理和优势。同时,结合实际应用场景进行实践和优化,也是提高分布式事务处理能力的重要途径。
43 15
|
1月前
|
存储 Java 关系型数据库
在Spring Boot中整合Seata框架实现分布式事务
可以在 Spring Boot 中成功整合 Seata 框架,实现分布式事务的管理和处理。在实际应用中,还需要根据具体的业务需求和技术架构进行进一步的优化和调整。同时,要注意处理各种可能出现的问题,以保障分布式事务的顺利执行。
51 6
|
1月前
|
数据库
如何在Seata框架中配置分布式事务的隔离级别?
总的来说,配置分布式事务的隔离级别是实现分布式事务管理的重要环节之一,需要认真对待和仔细调整,以满足业务的需求和性能要求。你还可以进一步深入研究和实践 Seata 框架的配置和使用,以更好地应对各种分布式事务场景的挑战。
29 6
|
28天前
Seata框架在AT模式下是如何保证数据一致性的?
通过以上这些机制的协同作用,Seata 在 AT 模式下能够有效地保证数据的一致性,确保分布式事务的可靠执行。你还可以进一步深入研究 Seata 的具体实现细节,以更好地理解其数据一致性保障的原理。
39 3
|
28天前
|
测试技术
Seata框架的性能如何?
总的来说,Seata 框架在性能方面具有一定的潜力和优势,但需要根据具体情况进行综合评估和优化,以确保其在实际应用中能够发挥出良好的性能表现。
31 1
|
28天前
|
消息中间件 运维 数据库
Seata框架和其他分布式事务框架有什么区别
Seata框架和其他分布式事务框架有什么区别
25 1
|
1月前
|
Java 数据库
在Java中使用Seata框架实现分布式事务的详细步骤
通过以上步骤,利用 Seata 框架可以实现较为简单的分布式事务处理。在实际应用中,还需要根据具体业务需求进行更详细的配置和处理。同时,要注意处理各种异常情况,以确保分布式事务的正确执行。
|
3月前
|
SQL NoSQL 数据库
SpringCloud基础6——分布式事务,Seata
分布式事务、ACID原则、CAP定理、Seata、Seata的四种分布式方案:XA、AT、TCC、SAGA模式
SpringCloud基础6——分布式事务,Seata