问题现象
使用Pandora Boot开发的HSF应用,当应用注册或订阅的服务数多时,启动较慢。
可能原因
使用Pandora Boot开发的HSF应用会为每个发布(服务提供者端)或消费(服务消费者端)的服务设置从服务注册中心(ConfigServer)同步地址的默认时间,默认为3000毫秒。当发布或消费的服务数量多时,每个服务需要串行等待同步地址,会导致应用启动较慢。
解决方案
- 打开Pandora Boot应用的application.properties文件,设置地址同步时间参数spring.hsf.max-wait-address-time(单位:毫秒)。
- 设置全局默认地址同步时间参数。示例如下。
spring.hsf.max-wait-address-time = 500
- 设置单个服务接口的地址同步时间参数。示例如下。
spring.hsf.max-wait-address-times.<完整的服务接口名>=<等待地址推送时间>
- 设置全局默认地址同步时间参数。示例如下。
- 可选:服务消费者端可以针对服务接口,单独设置地址同步时间参数addressWaitTime(单位:毫秒)。当服务进行订阅时,会在该参数指定的时间内阻塞线程,等待地址推送,避免调用该服务时因地址为空而出现地址找不到的情况。在消费者端应用启动时就需要订阅服务的接口,才需要设置该参数,推荐设置为3000~5000毫秒,否则应用启动时可能遇到错误编码:HSF-0001的异常(设置该参数的一个副作用为应用启动时间会延长)。
- 重启应用。如果设置spring.hsf.max-wait-address-time参数并重启应用后,应用启动还是较慢,可以对正在启动的应用做线程堆栈
jstack <应用JVM进程号> >> threaddump.txt
,并结合$USER_HOME/log/configclient/config-client.log日志文件、$USER_HOME/log/hsf/目录内的日志文件进行分析。
文档内容是否对您有帮助?