我们必须使用Thrift框架使用RPC将异常从一个节点传播到另一个节点。我知道可以在Thrift中声明异常,如下所示:
exception SampleException {
1: optional string cause
}
这会产生一个扩展通用TException的异常。
我想创建TException
s,其原因是另一个异常可能不会扩展TException
,并在另一个节点中接收该异常。这可能吗?
如果不可能那么传播不扩展TException
的通用异常会很好。如果我们可以传播RuntimeException
s。
答案 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的工作原理是一样的。如果您认为当前的行为可以改进,请在邮件列表上讨论和/或发送拉取请求。