Could you please elaborate with an example? Applying to my mentioned code, does it mean maintaining a pool of userServiceClient, each with different THttpClient, protocol and mp?
Kind regards, Tuan Le On Tue, Jun 7, 2016 at 7:14 PM, Daniel Wu <[email protected]> wrote: > 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 > > > > >
