Thrift client/connection is not thread safe. Use a lock or object pool.
On 7/6/2016, 5:51 PM, "Tuan Le Dinh" <[email protected]> wrote:
>Hello,
>
>I have a working Thrift client in the below snippet.
>
>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));
>
>When running the client within multi-threaded environment
>
>threads[i] = new Thread(new Runnable() {
> @Override
> public void run() {
> System.out.println(userServiceClient.getUserById(someId));
> }}
>
>I got an exception: *out of sequence response*
>
>org.apache.thrift.TApplicationException: getUserById failed: out of
>sequence response
>at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:76)
>
>I guess the reason is that Thrift generated Client is not thread safe. But
>if I want multi-clients to call the same method getUserById() simultaneously,
>how can I make it?
>
>I made a copy of this question on Stackoverflow. You can see it here
>http://stackoverflow.com/questions/37674466/how-to-make-a-thrift-client-for-multiple-threads
>Kind regards,
>Tuan Le