gRPC:如何向 NettyServer 添加许多服务

gRPC: How to Add Many Services to NettyServer

要提供 gRPC 服务,我需要实现一个 Netty 服务器,并将我的 (gRPC) 服务添加到其中。在 Java 我做了:

Server server = NettyServerBuilder.forPort(port).addService(RetrieveServiceGrpc.bindService(new RetrieveServiceImpl()))
            .build().start();

如果我有很多服务,我可能会有这样的东西:

.addService(....) //1st service
.addService(....) // 2nd service
.addService(....)

有没有更好的方法来实现这个? (例如:通过一些配置将所有服务添加到某个文件夹下)

是的,多次调用 addService() 是建议的服务器设置方式。实现哪些服务通常很重要,添加新服务的频率有点低,因此将它们明确列出是个不错的主意。

gRPC 可以改进对依赖注入框架的支持以注入服务,例如添加 addServices(Set)。然而,gRPC 需要采取公正的方法,因为有多个相互竞争的 DI 框架,开发人员可以强烈地感受到他们的偏好。如果您有改善 DI 体验的建议,请随时 make an issue

您现在可以使用 grpc-spring-boot-starter:

在服务 class (RetrieveServiceImpl) 上使用 @GRpcService 注释
@GRpcService
public static class GreeterService extends GreeterGrpc.GreeterImplBase {
    @Override
    public void sayHello(GreeterOuterClass.HelloRequest request, StreamObserver<GreeterOuterClass.HelloReply> responseObserver) {
        final GreeterOuterClass.HelloReply.Builder replyBuilder = GreeterOuterClass.HelloReply.newBuilder().setMessage("Hello " + request.getName());
        responseObserver.onNext(replyBuilder.build());
        responseObserver.onCompleted();
    }
}

这负责调用 addService 方法等 (details)。

关于 GitHub 的文档:https://github.com/LogNet/grpc-spring-boot-starter/tree/master#show-case