我有一个用例,我在一个请求中执行了6个步骤。该企业要求我们捕获有关每个步骤结果的指标。他们希望我们登录Kinesis流。
建筑方面我正在寻找最佳解决方案。我们有基于java的服务,我希望在请求进行时丰富请求范围对象,然后当端点完成时,我们将使用fire和forget模式对kinesis异步进行服务调用。这样报告就不会占用主线程。
我正在考虑使用原始的ThreadLocal或guice范围。有没有人遇到他们解决的类似问题?我正在考虑使用guice请求作用域组件,这将极大地简化代码。只是寻找一些意见。谢谢!
答案 0 :(得分: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
,它将在您的所有步骤中成为同一个对象。例如,您可以使用提供程序来访问它。