我试图找出gRPC中的异常处理机制如何工作。
除了try-catch块以外,还有其他方法可以处理运行时异常,例如服务器端的IllegalArgumentException
吗?
例如,我有一些gRPC流式传输客户端服务,其中在深层次上某些 asserts 不能满足传递的参数的情况下,方法onNext
会抛出IllegalArgumentException
(在某些库中,例如com.google.common.base.Preconditions
)。
在这种情况下,客户端上将有StatusRuntimeException
和Status.UNKNOWN
,但是还有另一种解决方案不允许处理此类异常,并且在服务调用后将其转换为可读的StatusRuntimeException
吗?
答案 0 :(得分:0)
通常,您应该在服务器端捕获所有异常,并将它们转换为正确的StatusRuntimeException
或StatusException
。但是,您可以通过在服务器上使用TransmitStatusRuntimeExceptionInterceptor
类来自动为您转换错误,从而避免这种情况。
通常不使用它的原因是因为它意味着意外的错误看起来与预期的错误相同。您可能不希望传播异常消息,可能是因为异常消息具有私有用户数据,而是将其重写到您的服务器处理程序中。