0

我开始使用 apache thrift(java 编程)并且很难找到深入解释它的文档 - 所以我希望你能帮助我。

我正在尝试创建一个服务(接口),该服务(接口)具有返回具有函数的字段的函数(例如:另一个接口)。

我试过这段代码:

namespace java test

service A {
  string somefunc()
}

service B {
  string somefunc2(),
  A getA()
}

但我没有成功..当我尝试编译 thrift 文件时,我收到一个错误,它在服务 B 中 - A 字段未定义。

我也试过:

namespace java test

struct A {
  1: string somefunc()
}

service B {
  A getA()
}

这次它编译成功,但它没有将 somefunc 视为函数,而是将其视为字符串类型的字段。

有没有像我想要的那样做的东西?

谢谢!

4

1 回答 1

0

Thrift 通过网络发送序列化的数据结构。没有标准的方式来发送可执行代码。各种语言允许通过网络传输代码(即.class文本形式的 java 文件或 python 脚本),但不能互操作,因此不被 Thrift 支持。

但是,如果您需要,thrift 可以用于服务发现。单一的 thrift 服务总是绑定在特定的主机/端口上。因此,服务发现代码的节俭定义可能如下所示:

namespace java test

struct Endpoint {
  1: required string host;
  2: required i32 port;
}

service A {
  string somefunc()
}

service B {
  string somefunc2(),
  Endpoint getA()
}

服务发现代码可能如下所示:

B.Client bClient = <.....>

Endpoint endpoint = bClient.getA();
TTransport transport = new TSocket(endpoint.host, endpoint.port);
transport.open();
A.Client aClient = = new A.Client(new TBinaryProtocol(transport));
aClient.somefunc2();

如果需要,Endpoint可以使用协议/传输元数据扩展定义,允许在二进制/紧凑/JSON 协议和 TTransport/TFramedTransport/等之间进行选择。

于 2013-01-10T10:08:10.980 回答