document.write("");

seata 1.6.1 并发 RPC Timeout

前提:

seata版本1.6.1

并发(同时大量rm分支注册)

Client端报错 RPC Timeout

查询Seata Client端报错RPC Timeout时,Seata Service端的报错为java.lang.IndexOutOfBoundsException: Index: 1, Size: 0

ERROR --- [  ServerHandlerThread_1_49_500] i.s.c.r.p.s.ServerOnRequestProcessor     : handle request error: java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
==>
java.util.concurrent.ExecutionException: java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
	at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)
	at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1908)
	at io.seata.core.rpc.processor.server.ServerOnRequestProcessor.onRequestMessage(ServerOnRequestProcessor.java:201)
	at io.seata.core.rpc.processor.server.ServerOnRequestProcessor.process(ServerOnRequestProcessor.java:123)
	at io.seata.core.rpc.netty.AbstractNettyRemoting.lambda$processMessage$2(AbstractNettyRemoting.java:281)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.lang.Thread.run(Thread.java:750)
Caused by: java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
	at java.util.concurrent.CopyOnWriteArrayList.add(CopyOnWriteArrayList.java:463)
	at io.seata.core.rpc.processor.server.ServerOnRequestProcessor.lambda$onRequestMessage$1(ServerOnRequestProcessor.java:191)
	at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1640)
	... 1 common frames omitted

查看seata相关issue,这个issue已在2023年2月1号提出,并在2023年2月2号修正,合并的版本是1.7.0和2.2.0
github.com

在 版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub 中查看seata 1.7.0的版本匹配关系,是

Spring Cloud Alibaba VersionSentinel VersionNacos VersionRocketMQ VersionDubbo VersionSeata Version

2022.0.0.0

1.8.6

2.2.1

4.9.4

~

1.7.0

Spring Cloud Alibaba Version 2022.0.0.0 对应的是 SpringBoot Version 3.0+

Spring Cloud Alibaba VersionSpring Cloud VersionSpring Boot Version

2022.0.0.0*

Spring Cloud 2022.0.0

3.0.2

SpringBoot Version 3.0+对应的最低jdk版本是 jdk17

但由于当前项目已经限制必须为jdk 1.8

导致不能执行升版的动作,只能修改源码,根据github上对应的 bugfix merge源码,照抄一份合在本地代码中,重新打包

merge url:bugfix: parallel request handle throw IndexOutOfBoundsException by funky-eyes · Pull Request #5281 · apache/incubator-seata · GitHub

使用 IDEA 运行 seata 1.6.1 源码 - 人间春风意 - 博客园 运行源码,然后照着fix代码修正本地版本
重新打包即可

如需打包成镜像,可查看 distribution\Dockerfile 文件

步骤比较详细,就是版本号不太对,自行调整吧

1. mvn -Prelease-seata -Dmaven.test.skip=true clean install -U
2. cd distribution/target/seata-server-xxx/seata/
3. docker build --no-cache --build-arg SEATA_VERSION=1.6.0-SNAPSHOT -t seata-server:1.6.0-dev .

PS:如果之前使用的是官方seata 1.6.1镜像,且指定的有挂载配置文件夹,

需要注意修改挂载的路径,官方1.6.1镜像挂载的配置路径是 /seata-server/resources,源码打包的是 /seata-server/conf

避免使用之前挂载的路径,导致配置日志采集等不生效

官方镜像里的依赖文件夹是/seata-server/libs,打包源码后,路径是/seata-server/lib

如果需要支持oracle,需要注意把ojdbc8.jar的文件复制到/seata-server/lib/jdbc文件夹中

 

posted @ 2025-07-15 09:58  人间春风意  阅读(34)  评论(0)    收藏  举报