ServerServiceDefinition

ServerServiceDefinition

我正在学习最近使用grpc,并且在实例化名为server的Server类后对一件事感到困惑:

server = ServerBuilder.forPort(port)
            .addService(new MetadataStoreImpl(this.config, port))
            .executor(Executors.newFixedThreadPool(numThreads))
            .build()
            .start();


我阅读了Java文档,发现了ServerBuilder.addService:

public abstract T addService(ServerServiceDefinition service);


在这种情况下,我使用自己的类“ MetadataStoreImpl”来替换“ ServerServiceDefinition”,但仍然不知道为什么。此外,如何从类服务器获取此MetadataStoreImpl类的成员变量的引用?
有人可以帮我吗?

最佳答案

如果您的MetadataStoreImpl扩展了生成的服务存根(例如MetadataStoreImplBase),则它将实现gRPC的BindableService接口。 ServerBuilder具有另一个addService方法,该方法接受BindableService而不是ServerServiceDefinitionHere是我们生成的代码的bindService方法实现的示例,该方法仅生成并返回ServerServiceDefinition

对于第二个问题,您可以通过ServerServiceDefinitions获取Server#getServices的列表,但这不会直接给您原来的MetadataStoreImpl,而是由生成的代码的ServerServiceDefinition方法返回的bindService。通常,您不会使用getServices,因为在将服务添加到构建器之后,您只会保留对服务的引用。

您可以在https://grpc.io/docs/reference/java/generated-code.html中找到gRPC Java生成的代码的更多信息。

10-01 19:00