如何解决获取python中已注册的gRPC服务名称和方法的列表
Java的grpc-core可以选择从grpc服务器对象获取服务描述符列表。从中可以收集服务名称和方法名称。
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
解决方法
如果我正确理解了您的需求,以下代码段可能会对您有所帮助。
# 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]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。