Java gRPC从ServerInterceptor获取服务名称

Java gRPC从ServerInterceptor获取服务名称,java,grpc,proto,Java,Grpc,Proto,我正在使用gRPC,我需要从ServerInterceptor获取请求服务的名称,但这似乎是不可能的 基本上,通过ServerInterceptor的实现,我需要知道将被调用的ServiceGrpc的名称(作为字符串) public class PermissionInterceptor implements ServerInterceptor { @Override public <ReqT, RespT> ServerCall.Listener&

我正在使用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);
        }
}
但我需要这个:

co.test.domain.transaction.TransactionNeoBasicImpl
谢谢,这是不可能的


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

有一种方法可以做到这一点

String fullMethodName = serverCall.getMethodDescriptor().getFullMethodName();
String serviceName = MethodDescriptor.extractFullServiceName(fullMethodName);

基本上,fullMethodName以完全限定的服务名称作为前缀(后跟“
/
”)。类似这样的
fullyqualified.ServiceName/MethodName

谢谢您的回答。因此,无法从ServerInterceptor读取TransactionNeobasimpl类中的注释。我说的对吗?对。如果没有手动管道,你就不能从拦截器中取出。
String fullMethodName = serverCall.getMethodDescriptor().getFullMethodName();
String serviceName = MethodDescriptor.extractFullServiceName(fullMethodName);