基于SpringBoot的算法微服务,通常在启动阶段加载算法模型。但因为业务上,模型大小和数量是动态的,因此这一过程短则1分钟,长则5+分钟。在启动时加载导致的启动时间过长,会影响服务自身的监控告警、健康检测。
那么,理想的方式是先将服务启动,然后再加载算法模型。为此,我需要一个由SpringBoot提供的观察者模式的事件,在服务自身启动后触发。
修改前后的代码示例如下:
@Service
@Log4j2
public class QasEngine {
@PostConstruct
public void bootstrap() {
//获取元数据
//加载算法模型
}
}
@Service
@Log4j2
public class QasEngine implements ApplicationListener<ApplicationReadyEvent> {
@PostConstruct
public void bootstrap() {
//获取元数据
}
@Override
public void onApplicationEvent(ApplicationReadyEvent event) {
//加载算法模型
//懒加载其他类型的服务
}
}
需要注意的是,如果你的业务存在HSF、MetaQ等服务,请延迟启动这些服务,直至算法模型加载完毕。