Java 使用Apache Thrift时创建包含函数的字段时出错
我开始使用apache thrift(java编程),很难找到深入解释它的文档,所以我希望您能帮助我 我试图创建一个服务(接口),它有一个函数,返回一个包含函数的字段(例如:另一个接口) 我尝试了以下代码: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字段中没
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之间进行选择