像AWS lambda这样的“无服务器”基础设施利用检查点协调恢复来缩短java程序的启动时间。
AWS 文档指出
当 Lambda 从快照恢复您的函数时,无法保证您的函数在初始化阶段建立的连接状态。验证网络连接的状态并根据需要重新建立它们。在大多数情况下,AWS 开发工具包建立的网络连接会自动恢复。对于其他连接,请查看最佳实践。
Spring 文档提到
利用正在运行的应用程序的检查点/恢复通常需要额外的生命周期管理来正常停止和开始使用文件或套接字等资源,并停止活动线程。
我想知道当使用标准库中的
HttpClient
或 Apache 中的 CloseableHttpClient
来处理这个问题时我需要做什么。afterRestore
挂钩中做什么才能避免任何与网络相关的问题?
@Override
public void beforeCheckpoint(org.crac.Context<? extends Resource> context) throws Exception {
var response = performPrimingRequest(httpClient);
System.out.println(response.statusCode());
}
已建立的连接将被关闭,并且目标 IP 可能不再有效。所以我假设重新创建客户端或至少清除连接池。使用标准 JavaClient 可以实现这一点吗?还需要什么吗?