如何从 grpc Context.current() 访问属性?
How to Access attributes from grpc Context.current()?
是否可以从 rpc 方法定义访问 grpc 调用的上下文属性?
我写了一个类似于此的服务器拦截器
@Override
public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(ServerCall<ReqT, RespT> call, final Metadata requestHeaders, ServerCallHandler<ReqT, RespT> next) {
Context.Key<String> USER = Context.key("USER");
Context ctx = Context.current().withValue(USER, "chandan");
return Contexts.interceptCall(ctx, call, requestHeaders, next);
}
在服务实现中,我尝试了类似
的方法
Context.Key<String> key = Context.key("USER");
String value = key.get(Context.current())
每次值为空。但是,在 intellij 中调试时,我可以在 context.current().keyValueEntries
中看到这些值,如
CompressedIndex(bitmap=100001000000000000000000000000 Leaf(key=USER value=chandan) Leaf(key=opencensus-trace-span-key value=BlankSpan) )
如何访问上下文 attributes/What 是解决这个问题的正确方法吗?
Context.Key
使用引用相等。 "USER"
字符串是 toString()
输出中使用的调试字符串。您应该创建一次 Key
并在您需要的任何地方引用该实例。
因为 Context.Key
使用引用相等性,您可以使用正常的 Java 可见性限制来限制谁可以访问该值,就像您对 ThreadLocal
.[=16= 所做的那样]
是否可以从 rpc 方法定义访问 grpc 调用的上下文属性?
我写了一个类似于此的服务器拦截器
@Override
public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(ServerCall<ReqT, RespT> call, final Metadata requestHeaders, ServerCallHandler<ReqT, RespT> next) {
Context.Key<String> USER = Context.key("USER");
Context ctx = Context.current().withValue(USER, "chandan");
return Contexts.interceptCall(ctx, call, requestHeaders, next);
}
在服务实现中,我尝试了类似
的方法Context.Key<String> key = Context.key("USER");
String value = key.get(Context.current())
每次值为空。但是,在 intellij 中调试时,我可以在 context.current().keyValueEntries
中看到这些值,如
CompressedIndex(bitmap=100001000000000000000000000000 Leaf(key=USER value=chandan) Leaf(key=opencensus-trace-span-key value=BlankSpan) )
如何访问上下文 attributes/What 是解决这个问题的正确方法吗?
Context.Key
使用引用相等。 "USER"
字符串是 toString()
输出中使用的调试字符串。您应该创建一次 Key
并在您需要的任何地方引用该实例。
因为 Context.Key
使用引用相等性,您可以使用正常的 Java 可见性限制来限制谁可以访问该值,就像您对 ThreadLocal
.[=16= 所做的那样]