Jersey HK2:依赖注入和健康检查

时间:2021-06-15 09:32:34

标签: dependency-injection jersey monitoring hk2 health-check

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

现在,如果我对这些进程使用的类进行更改(例如,在类中添加依赖项)并且无意中忘记更新 binder 类,这些进程仍会启动但失败并显示 {{ 1}}(这是预期的)。但是,这并没有停止节点上的进程,监控工具仍然认为进程运行良好。

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

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

我有几个问题:

  • ServiceLocator 中是否有一种本地方式可以做到这一点?
  • 我如何知道 Locator 是否能够解决所有依赖项(即没有 Jersey HK2)?

1 个答案:

答案 0 :(得分:1)

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

您可能还想认真研究 hk2 的自动绑定选项。使一切变得更容易 IMO。请参阅有关 Automatic Service Population

的部分

以下是使用 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?
        
    }
    
}