2017-04-22 83 views
1

我有一个用例,我在一个请求中执行了6个步骤。该业务正在要求我们获取有关每个步骤结果的指标。他们希望我们登录到Kinesis流。Guice请求跟踪请求工作流的范围

建筑我正在寻找最好的解决方案。我们有基于Java的服务,我希望在请求进行时扩大请求范围对象,然后当端点完成后,我们将使用fire and forget模式进行异步异步服务调用。通过这种方式,报告不会阻碍主线程。

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

回答

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,它将在所有步骤中成为相同的对象。例如,您可以使用提供者访问它。