1

我有一个用例,我在一个请求中执行了 6 个步骤。企业要求我们捕获有关流程中每个步骤的结果的指标。他们希望我们登录到 Kinesis 流。

在架构上,我正在寻找最佳解决方案。我们有基于 java 的服务,我希望随着请求的进行而丰富一个请求范围的对象,然后当端点完成时,我们将使用 fire and forget 模式对 kinesis 进行异步服务调用。这样报告就不会阻碍主线程。

我正在考虑使用原始的 ThreadLocal 或 guice 范围。有没有人遇到过他们解决的类似问题?我正在考虑使用 guice 请求范围组件,这将大大简化代码。只是在寻找一些意见。谢谢!

4

1 回答 1

1

我假设您不在 servlet 环境中,因为您将只使用内置的请求范围。即使这样,您也可以使用来自guice-servlet的请求范围来自己构建范围。

void processRequest() {
    RequestScoper scope = ServletScopes.scopeRequest(Collections.emptyMap());
    try ( RequestScoper.CloseableScope ignored = scope.open() ) {
        step1();
        step2();
        step3();
        step4();
        step5();
        step6();
    }
}

您可以使用@RequestScoped它,它将在您的所有步骤中成为同一个对象。例如,您可以使用提供程序来访问它。

于 2017-04-24T06:33:44.040 回答