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

简介: 【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

目录
相关文章
|
数据采集 存储 数据可视化
分布式爬虫框架Scrapy-Redis实战指南
本文介绍如何使用Scrapy-Redis构建分布式爬虫系统,采集携程平台上热门城市的酒店价格与评价信息。通过代理IP、Cookie和User-Agent设置规避反爬策略,实现高效数据抓取。结合价格动态趋势分析,助力酒店业优化市场策略、提升服务质量。技术架构涵盖Scrapy-Redis核心调度、代理中间件及数据解析存储,提供完整的技术路线图与代码示例。
2078 0
分布式爬虫框架Scrapy-Redis实战指南
|
测试技术
Seata框架的性能如何?
总的来说,Seata 框架在性能方面具有一定的潜力和优势,但需要根据具体情况进行综合评估和优化,以确保其在实际应用中能够发挥出良好的性能表现。
738 147
Seata框架在AT模式下是如何保证数据一致性的?
通过以上这些机制的协同作用,Seata 在 AT 模式下能够有效地保证数据的一致性,确保分布式事务的可靠执行。你还可以进一步深入研究 Seata 的具体实现细节,以更好地理解其数据一致性保障的原理。
1006 157
|
消息中间件 运维 数据库
Seata框架和其他分布式事务框架有什么区别
Seata框架和其他分布式事务框架有什么区别
690 153
|
消息中间件 数据库
Seata框架的工作原理
你还可以进一步深入研究 Seata 框架的技术细节和具体实现,以更好地理解其工作原理和优势。同时,结合实际应用场景进行实践和优化,也是提高分布式事务处理能力的重要途径。
885 168
|
监控 Java 调度
SpringBoot中@Scheduled和Quartz的区别是什么?分布式定时任务框架选型实战
本文对比分析了SpringBoot中的`@Scheduled`与Quartz定时任务框架。`@Scheduled`轻量易用,适合单机简单场景,但存在多实例重复执行、无持久化等缺陷;Quartz功能强大,支持分布式调度、任务持久化、动态调整和失败重试,适用于复杂企业级需求。文章通过特性对比、代码示例及常见问题解答,帮助开发者理解两者差异,合理选择方案。记住口诀:单机简单用注解,多节点上Quartz;若是任务要可靠,持久化配置不能少。
1251 4
|
存储 监控 数据可视化
常见的分布式定时任务调度框架
分布式定时任务调度框架用于在分布式系统中管理和调度定时任务,确保任务按预定时间和频率执行。其核心概念包括Job(任务)、Trigger(触发器)、Executor(执行器)和Scheduler(调度器)。这类框架应具备任务管理、任务监控、良好的可扩展性和高可用性等功能。常用的Java生态中的分布式任务调度框架有Quartz Scheduler、ElasticJob和XXL-JOB。
6290 66
|
数据采集 人工智能 分布式计算
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
阿里云推出的MaxFrame是链接大数据与AI的分布式Python计算框架,提供类似Pandas的操作接口和分布式处理能力。本文从部署、功能验证到实际场景全面评测MaxFrame,涵盖分布式Pandas操作、大语言模型数据预处理及企业级应用。结果显示,MaxFrame在处理大规模数据时性能显著提升,代码兼容性强,适合从数据清洗到训练数据生成的全链路场景...
1109 5
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
|
人工智能 分布式计算 大数据
MaxFrame 产品评测:大数据与AI融合的Python分布式计算框架
MaxFrame是阿里云MaxCompute推出的自研Python分布式计算框架,支持大规模数据处理与AI应用。它提供类似Pandas的API,简化开发流程,并兼容多种机器学习库,加速模型训练前的数据准备。MaxFrame融合大数据和AI,提升效率、促进协作、增强创新能力。尽管初次配置稍显复杂,但其强大的功能集、性能优化及开放性使其成为现代企业与研究机构的理想选择。未来有望进一步简化使用门槛并加强社区建设。
797 8
seata是怎么进行分布式事务控制的
seata是怎么进行分布式事务控制的

热门文章

最新文章