HSF应用注册或订阅服务数多导致启动较慢怎么办?

问题现象

使用Pandora Boot开发的HSF应用,当应用注册或订阅的服务数多时,启动较慢。

可能原因

使用Pandora Boot开发的HSF应用会为每个发布(服务提供者端)或消费(服务消费者端)的服务设置从服务注册中心(ConfigServer)同步地址的默认时间,默认为3000毫秒。当发布或消费的服务数量多时,每个服务需要串行等待同步地址,会导致应用启动较慢。

解决方案

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