我正在使用gRPC,我需要从ServerInterceptor获取请求的服务名称,但似乎不可能。

基本上从ServerInterceptor的实现中,我需要知道将被调用的ServiceGrpc的名称(作为字符串)。

public class PermissionInterceptor implements ServerInterceptor {

        @Override
        public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(
                ServerCall<ReqT, RespT> serverCall, Metadata metadata, ServerCallHandler<ReqT, RespT> handler
        ) {
            // here I need the name of RPC service that has been requested

            return handler.startCall(serverCall, metadata);
        }
}

请注意,我已经尝试使用serverCall.getMethodDescriptor(),但是它返回原型服务的名称,而不是(java)服务的真实名称。

它返回:
co.test.domain.transaction.TransactionService

但是我需要这个:
co.test.domain.transaction.TransactionNeoBasicImpl

谢谢

最佳答案

这是不可能的。

如果拦截器是应用程序之前的最后一个拦截器,则可以检查handler的类并查看其父类的名称。但这是非常有限的,不一定得到支持。

10-06 12:49