泽西岛HK2:依赖性注射和健康检查



我的应用程序有很多异步(cron(进程,它们在Jersey都有各自的binder类。这些过程是通过独立的脚本启动和管理的。

现在,如果我更改了这些进程使用的类(例如,在类中添加依赖项(,却忘记了无意中更新binder类,那么进程仍然会启动,但会因org.glassfish.hk2.api.UnsatisfiedDependencyException而失败(这是意料之中的(。然而,这并没有停止节点上的进程,监控工具仍然认为进程运行良好。

我希望在这些流程中实现健康检查,这样我就可以看到流程在部署后是否运行良好,并且能够在没有任何依赖性错误的情况下启动。我正在探索以下选项:

  • ServiceLocator健康状态导出到监控系统(例如prometheus(的异步轻量级进程
  • API端点,可从外部轮询,并根据ServiceLocator状态返回响应

我有几个问题:

  • Jersey HK2中是否有本地方法可以做到这一点
  • 我如何知道Locator是否能够解析所有依赖项(即没有UnsatisfiedDependencyException(

在hk2中有一个特殊的服务,称为ErrorService,您可以使用它来查看创建服务是否失败。由于hk2是一个动态框架,在有人尝试创建失败的服务之前,不会调用此错误服务实现。

你可能还想认真研究一下hk2的自动绑定选项。使一切变得更加容易IMO。请参阅自动服务填充部分

以下是使用ErrorService:的示例

@Service
public class ExampleErrorService implements ErrorService {
@Override
public void onFailure(ErrorInformation ei) throws MultiException {
if (ErrorType.SERVICE_CREATION_FAILURE.equals(ei.getErrorType())) {
// Tell your health check service there was an exception
return;
}

// Maybe log other failures?

}

}

最新更新