通知Java客户端grpc中的服务器异常/错误

时间:2019-12-11 12:37:17

标签: java exception kotlin grpc

我是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来处理它

我希望可以帮助我,如有必要,我可以发布更多代码

0 个答案:

没有答案