获取python中已注册的gRPC服务名称和方法的列表

2024-09-28 01:34:05 发布

您现在位置:Python中文网/ 问答频道 /正文

GRPCCoreforJava可以选择从GRPCServer对象获取服务描述符列表。我们可以从中收集服务名称和方法名称

    for (ServerServiceDefinition serverServiceDefinition: server.getServices()) {
        ServiceDescriptor serviceDescriptor = serverServiceDefinition.getServiceDescriptor();
        Collection<MethodDescriptor<?, ?>> methods = serviceDescriptor.getMethods();
        LOG.info("Service Name: {}", serviceDescriptor.getName());
        for (MethodDescriptor<?, ?> methodDescriptor : methods) {
            LOG.info("\t{}", methodDescriptor.getFullMethodName());
        }
    }

我希望在python中实现类似的功能,但没有那么明显。理想情况下,我希望这样做时不必求助于反射,也不必通过生成的protobuf python文件进行黑客攻击

一种方法是从protobuf文件中获取信息,但这需要更多的手工工作:

    import service_pb2

    a = service_pb2._<service_name>
    print(a.name)
    for m in a.methods:
        print(f'\t{m.name}')

而且,通过服务器对象本身获得注册的服务更有意义

例如,我希望能够输出与应用程序关联的所有已注册服务和服务方法

Server Name: ServiceName1
    serviceMethod1
    serviceMethod2
    serviceMethod3
    serviceMethod4
Server Name: ServiceName2
    serviceMethod1
    serviceMethod2
    serviceMethod3
Server Name: ServiceName3
    serviceMethod1
    serviceMethod2

Tags: 对象方法nameinfo名称logforserver
1条回答
网友
1楼 · 发布于 2024-09-28 01:34:05

如果我正确理解了您的需求,下面的代码片段可能会对您有所帮助

# server is the configured grpc server object.

for service in server._state.generic_handlers:
    print("Service Name:", service.service_name())
    for method in service._method_handlers:
        print(4*" " + method)

如果您不想要该方法的全名,请使用以下命令:

method.split('/')[-1]

相关问题 更多 >

    热门问题