HSF 应用注册或订阅服务数多导致启动比较慢
问题现象
使用 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
- 服务消费者端还可以针对服务接口通过参数
addressWaitTime
单独设置地址同步时间。当服务进行订阅时,会在该参数指定的时间内阻塞线程,等待地址推送,避免调用该服务时因为地址为空而出现地址找不到的情况。在消费者端应用启动时就需要订阅服务的接口才需要设置该参数,推荐设置为 3000 ~ 5000 毫秒,否则应用启动时可能遇到 HSF-0001-HSFServiceAddressNotFoundException 的异常(设置该参数的一个副作用就是应用启动会延长)。
在应用程序中对某个服务消费者接口单独设置等待地址推送时间
addressWaitTime
,单位:毫秒。 - 或者在应用配置文件
application.properties
中单独对某个服务接口设置spring.hsf.max-wait-address-times.<完整的服务接口名>=<等待地址推送时间
,等待地址推送时间的单位为毫秒。 - 如果设置了 spring.hsf.max-wait-address-time 参数并重启了应用,应用启动还是有点慢,可以对正在启动的应用做线程堆栈(jstack <应用JVM进程号>
>> threaddump.txt)并结合
$USER_HOME/log/configclient/config-client.log
、$USER_HOME/log/hsf/
下面的日志进行分析。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论