如何使用Thrift在RPC中传播通用异常?

时间:2016-07-13 21:05:55

标签: java rpc thrift

我们必须使用Thrift框架使用RPC将异常从一个节点传播到另一个节点。我知道可以在Thrift中声明异常,如下所示:

exception SampleException {
    1: optional string cause
}

这会产生一个扩展通用TException的异常。

我想创建TException s,其原因是另一个异常可能不会扩展TException,并在另一个节点中接收该异常。这可能吗?

如果不可能那么传播不扩展TException的通用异常会很好。如果我们可以传播RuntimeException s。

,则可以获得奖励积分

1 个答案:

答案 0 :(得分:1)

  

我想创建TExceptions,它会导致另一个异常,并在另一个节点中接收它。这可能吗?

exception bar {
    1 : i32 nix
}

exception foo {
    1 : bar bar
}
  

这会生成一个扩展泛型TException的异常。

是的,那是应该的样子。这并不是说TException本身无法从RuntimeException继承。

  

另外,让TExceptions成为RuntimeExceptions

会很不错

Thrift是开源的。你可以拥有你想要的东西。 ;-)还有this JIRA ticket

  

但它也需要是一个TException。它可以是通用的吗?

您必须使用Thrift支持的基本数据类型,以及使用struct,union,map<>,set<>,list<>,exception和typedef从中创建的任何复杂类型。如果您需要特殊行为,我建议您根据这些数据序列化数据并在客户端引发异常。在幕后,TException的工作原理是一样的。如果您认为当前的行为可以改进,请在邮件列表上讨论和/或发送拉取请求。