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
要提供 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