我是grpc的新手,我已经用Java(客户端)和Kotlin(服务器)构建了grpc客户端/服务器结构到目前为止,通信仍然有效。客户端能够触发.proto文件中定义的路由。我用以下代码启动服务器:
class GrpcServer() {
private var server: Server? = null
private val logger = Logger.getLogger(GrpcServer::class.java.name)
@Throws(IOException::class)
internal fun start(system: ActorSystem) {
val port = 12345
server = ServerBuilder.forPort(port)
.addService(MyServiceImpl(system))
.build()
.start()
logger.log(Level.INFO, "Server started, listening on {0}", port)
Runtime.getRuntime().addShutdownHook(object : Thread() {
override fun run() {
System.err.println("*** shutting down gRPC server since JVM is shutting down")
this@GrpcServer.stop()
System.err.println("*** server shut down")
}
})
}
private fun stop() {
server?.shutdown()
}
@Throws(InterruptedException::class)
internal fun blockUntilShutdown() {
server?.awaitTermination()
}
}
我现在的问题是,当客户端连接到该服务器时,我不知道如何在实现服务方法的类上将异常/错误路由到客户端。例如,一个消息流是
rpc getDocuments(stream DocumentsRequest) returns (stream DocumentResponse) {}
如果未发生任何异常,则一切正常,并且可以按预期运行,但是客户端不会注意到在服务器上处理getDocuments服务方法时发生的异常。对于客户端而言,即使所有内容都被try / catch包围,似乎没有发生任何事情,但是有必要让客户端了解服务器上发生的异常。客户端注册的唯一内容是服务器完全关闭时。因此,理想情况下,如果服务器上发生NullPOinterException,我希望客户端也能够获取它,并可以通过try / catch来处理它
我希望可以帮助我,如有必要,我可以发布更多代码