我在以下代码片段中拥有一个正常运行的Thrift客户端。
在多线程环境下运行客户端时,
我收到了一个异常:响应顺序错误。
TTransport transport = new THttpClient(new Uri("http://localhost:8080/api/"));
TProtocol protocol = new TBinaryProtocol(transport);
TMultiplexedProtocol mp = new TMultiplexedProtocol(protocol, "UserService");
UserService.Client userServiceClient = new UserService.Client(mp);
System.out.println(userServiceClient.getUserById(100));
在多线程环境下运行客户端时,
threads[i] = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(userServiceClient.getUserById(someId));
}
}
我收到了一个异常:响应顺序错误。
org.apache.thrift.TApplicationException: getUserById failed: out of sequence response
at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:76)
我猜原因是Thrift生成的客户端不是线程安全的。
但是如果我希望多个客户端同时调用相同的方法getUserById()
,该怎么做呢?
new THttpClient(..); ...
),你能使用连接池吗?(我不了解thrift) - zapl