要提供gRPC服务,我需要实现一个Netty服务器,并将我的(gRPC)服务添加到它。在Java中我做了:
Server server = NettyServerBuilder.forPort(port).addService(RetrieveServiceGrpc.bindService(new RetrieveServiceImpl()))
.build().start();
如果我有很多服务,我可能会有:
.addService(....) //1st service
.addService(....) // 2nd service
.addService(....)
有没有更好的方法来实现这一目标? (例如:通过某些配置添加某些文件夹下的所有服务)
答案 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