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

时间:2015-09-29 15:13:01

标签: netty grpc

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

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

如果我有很多服务,我可能会有:

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

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

2 个答案:

答案 0 :(得分:0)

是的,多次调用addService()将是建议的服务器设置方式。一般来说,实施哪些服务很重要,添加新服务的情况并不常见,因此明确列出这些服务并不是一件好事。

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

答案 1 :(得分:0)

您现在可以使用grpc-spring-boot-starter在服务类(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