【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 ;
在這裏插入圖片描述

1.確認自己seata-server啓動了

2.確認客戶端啓動的時候連接配置是正確的

例如:seata-server選擇的註冊中心是redis; 配置 cluster=default
在這裏插入圖片描述
註冊成功之後看看redis的值
在這裏插入圖片描述
確認客戶端的配置是正確的
在這裏插入圖片描述
如果上面都正確,但是還是有問題,請確認一下自己是不是手動配置了 GlobalTransactionScanner,確認一下配置的txServiceGroup參數是否跟跟配置一樣;如下
在這裏插入圖片描述


坑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>
在這裏插入圖片描述
說明我們要引入對應的依賴纔行; 按需引入;
同理 如果用的是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-spring-boot-starter方式啓動的;然後又手賤配置了GlobalTransactionScanner
在這裏插入圖片描述
那麼這個GlobalTransactionScanner開始加載的時候,SpringApplicationContextProvider並沒有被執行;GlobalTransactionScanner需要依賴於SpringApplicationContextProvider, 所以報錯了

解決方法: seata-spring-boot-starter方式啓動已經自動加載了GlobalTransactionScannerSeataAutoConfiguration
在這裏插入圖片描述
如果一定要自己手動加載的話 ,請加上註解


@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;
都是之前註冊過的,不知道爲啥沒有被清理;

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的時候 有報下面的錯誤


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

表面上看起來是那個異常,但是你打個斷點進去查看會發現最終的異常是下面這個

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

在這裏插入圖片描述

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章