Java 使用Apache Thrift时创建包含函数的字段时出错

Java 使用Apache Thrift时创建包含函数的字段时出错,java,thrift,Java,Thrift,我开始使用apache thrift(java编程),很难找到深入解释它的文档,所以我希望您能帮助我 我试图创建一个服务(接口),它有一个函数,返回一个包含函数的字段(例如:另一个接口) 我尝试了以下代码: namespace java test service A { string somefunc() } service B { string somefunc2(), A getA() } 但是我没有成功。。当我试图编译thrift文件时,我得到一个错误,服务B-A字段中没

我开始使用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计算为函数,而是将其作为字符串类型中的字段

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


谢谢

Thrift通过网络发送序列化数据结构。没有标准的方式来发送可执行代码。各种语言都允许通过网络传输代码(例如,java
.class
文件或文本形式的python脚本),但无法实现互操作,因此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();
服务发现代码可能如下所示:

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();
B.Client B客户端=
Endpoint=bClient.getA();
tttransport transport=new TSocket(endpoint.host,endpoint.port);
transport.open();
A.客户机aClient==新的A.客户机(新的TBinaryProtocol(传输));
aClient.somefunc2();
如果需要,
端点
定义可以使用协议/传输元数据进行扩展,允许在二进制/compact/JSON协议和tttransport/TFramedTransport/etc之间进行选择