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 Version | Sentinel Version | Nacos Version | RocketMQ Version | Dubbo Version | Seata 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 Version | Spring Cloud Version | Spring 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源码,照抄一份合在本地代码中,重新打包
使用 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文件夹中

浙公网安备 33010602011771号