小编gar*_*ulb的帖子

在 grpc 拦截器中使用 ThreadLocal 的正确方法是什么?

我们有一个 gPRC 服务,需要在类的 ThreadLocal 变量中设置身份验证/身份信息,才能正确调用另一个服务。gPRC 服务从请求中获取身份验证/身份信息,因此我正在考虑使用拦截器。

首先,我有一些代码如下所示。

public class ImpersonationInterceptor {
    public <ReqT, RespT> interceptCall(
        ServerCall<ReqT, RespT> serverCall, Metadata headers, ServerCallHandler<ReqT, RespT> next) {
        Principal principal = ... // get the identify from the request

        AuthContext.setPrincipal(principal); // underneath it uses a ThreadLocal.

        return next.startCall(
            new SimpleForwardingServerCall<>(call) {
                public void close(Status status, Metadata trailers) {
                    AuthContext.setPrincipal(null); // clear the identity
                }
            }
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

问题。

  • 服务方法本身的执行可能与执行拦截器不在同一个线程上,对吗?
  • 如果是真的,上面的方法不起作用,那么问题是,在 gRPC 世界中设置 ThreadLocal 变量的规范方法是什么?我知道 gRPC 从 0.12 开始就支持 Context,但就我而言,我必须使用 AuthContext 的 ThreadLocal 机制。 …

java rpc grpc

7
推荐指数
1
解决办法
3502
查看次数

标签 统计

grpc ×1

java ×1

rpc ×1