如何解决基于 gRPC 的 API 中的 RequestScoped Guice 注入
我想为基于 gRPC + Guice + HTTP 协议的后端服务创建 @RequestScoped 对象。
这是我的代码(未经测试):
实施:
@Getter
@Builder
@AllArgsConstructor
class MyContext {
@NonNull
private final Map<String,String> myMap;
}
@Provides
@RequestScoped
public MyContext getMyContext() {
return MyContext.builder()
.myMap(new ConcurrentHashMap())
.build();
}
客户端代码:
class MyContextUpdater {
@Inject
private final Provider<MyContext> myContext;
public void updateContextMap(final String key,final String value) {
this.myContext.get().getMyMap().put(key,value);
}
}
查询:
- 即使我的服务不是网络感知的(正常的后端服务),这会正常工作吗?如果不是,那么实现 RequestScoped 功能的一般做法是什么?
- 如果请求在代码流中创建了多个前台子线程,RequestScope 对象是否是线程安全的?如果不是,一般做法是什么?
- 如何使用本地应用程序/单元测试来测试它,因为它不是非 HTTP 请求范围。我们可以在 RequestScoped 使用的 ThreadLocal 中设置一些请求标识符以进行测试吗?
当前异常:
com.google.inject.ProvisionException: Unable to provision,see the following errors:
1) [Guice/ErrorInCustomProvider]: OutOfScopeException: Cannot access scoped [WeblabContext]. Either we are not currently inside an HTTP Servlet request,or you may have forgotten to apply GuiceFilter as a servlet filter for this request.
at WeblabScopeModule.getWeblabContext(WeblabScopeModule.java:33)
while locating WeblabContext
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。