一. 问题描述:
在本地开发环境, server端和worker都运行正常. 但是发布到SIT环境(容器)的时候, 服务端却监测不到worker
(worker可以找到服务端)
二. 问题表现:
1.服务端看不到Worker信息
2. 服务端日志信息
: Failed to deserialize message from [akka://oms@111.111.111.111:27778] with serializer id [6] and manifest []. com.esotericsoftware.kryo.kryo5.KryoException: Unable to read unknown data (unknown type). (tech.powerjob.common.request.WorkerHeartbeat#null)
- Worker正常启动
Worker正常启动, 说明worker是可以找到服务端的, 证明网络是没问题的.(一直怀疑容器的网络问题)
三. 处理过程
- 联系容器专家, 排查是不是容器或者部署环境的问题, 最终没有定位到问题.
- 联系技术专家, 通过分析日志, 找到了上面服务端打印的日志信息.但是问题依然很模糊,此时问题已经持续了三天,欲哭无泪呀.
- 度娘各种查询, 没有可用消息,沉思中…
- 最后, 到开源社区继续搜索. 突然想到去开源社区的issues搜搜看看是否有用的信息.
果然有发现:
查看开发环境版本,果然有问题:
由于SIT环境上的服务端是直接拉去的官方镜像,而且是latest版本, 而我本地的版本要低于这个版本.
最后修改服务端的镜像版本和worker版本保持一致(4.2.0),重新部署应用, 奇迹发生了.
- 镜像版本:
image: 'tjqq/powerjob-server:4.2.0
- worker版本:
<dependency>
<groupId>tech.powerjob</groupId>
<artifactId>powerjob-worker-spring-boot-starter</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>tech.powerjob</groupId>
<artifactId>powerjob-official-processors</artifactId>
<version>1.2.1</version>
</dependency>
四. 结论
问题原因:服务端的版本和worker版本不一致导致的.
到此问题终于解决.
对于开源的项目,还是要时刻保持警惕呀~