在撰写本文时,Play Framework处于 v2.6.0-M4 。由于Netty冲突,框架的v2.5版本难以使用gRPC(参见this stackoverflow answer)。
我开始研究gRPC和protobufs。已经从Play Framework 2.5移植了一个项目> 2.6.0-M4预计实际发布。目前我对gRPC的整合有一些疑问。 我想知道如何让gRPC服务器与Play Framework很好地协同工作。我知道v2.6 switched to Akka HTTP server而不是Netty,而我在sbt中使用grpc-netty
依赖,所以也许我将不得不再次将项目切换到Netty(这里是how)。
出于测试目的,我创建了一个快速而脏的GrpcServer.scala
类,它启动了一个带有GrpcServer监听的线程。我设法用gRPC添加ScalaPB并生成/编译我的protobufs。它非常适合与小型测试NodeJS应用程序通信,但我必须独立于主项目启动此服务器应用程序:
private def start(): Unit = {
server = ServerBuilder.forPort(GrpcServer.port).addService(GreeterGrpc.bindService(new GreeterImpl, executionContext)).build.start
GrpcServer.logger.info("Server started, listening on " + GrpcServer.port)
sys.addShutdownHook {
System.err.println("*** shutting down gRPC server")
self.stop()
System.err.println("*** server shut down")
}
}
现在,对于Play Framework v2.6中的真正集成,我正在寻找建议。以下是我可以做的一些事情:
有关清洁集成的任何提示/想法都很有帮助,因为除了以前的2.5版本中存在问题外,没有太多关于Play Framework和gRPC的信息...