开发者

Asynchronous request with Thrift in Java

开发者 https://www.devze.com 2023-04-05 23:10 出处:网络
I\'m looking for an example of how to make an asynchronous request in Java using Thrift. Looking at the generated code this seems to be possible, but I can\'t find a single example of how.

I'm looking for an example of how to make an asynchronous request in Java using Thrift. Looking at the generated code this seems to be possible, but I can't find a single example of how.

Here is an example of generated code that suggest the existence of an Asynchronous interface:

...
AsyncIface {
    public static class Factory implements org.apache.thrift.async.TAsyncClientFactory<AsyncClient> {
      private org.apache.thrift.async.TAsyncClientManager clientManager;
      private org.apache.thrift.protocol.TProtocolFactory protocolFactory;
      public Factory(org.apache.thrift.async.TAsyncClientManager clientManager, org.apache.thrift.protocol.TProtocolFa开发者_开发知识库ctory protocolFactory) {
        this.clientManager = clientManager;
        this.protocolFactory = protocolFactory;
      }
      public AsyncClient getAsyncClient(org.apache.thrift.transport.TNonblockingTransport transport) {
        return new AsyncClient(protocolFactory, clientManager, transport);
      }
    }
 ...

Any pointer on how to use it?


Use the above interface to make the async call like this (The code mentions Cassandra but will easily generalize to your application):

TNonblockingTransport transport = new TNonblockingSocket("127.0.0.1", 9160);
TAsyncClientManager clientManager = new TAsyncClientManager();
TProtocolFactory protocolFactory = new TBinaryProtocol.Factory();
Cassandra.AsyncClient client = new Cassandra.AsyncClient(protocolFactory, clientManager, transport);

Cassandra.method_call(parameters, new Callback());


You haven't given any context, so I'll give you the basic parts you'll need:

  • To perform an asynchronous call, you'll need make it in a thread
  • To get the result, you'll need some kind of call back

The following represents a basic example of these elements in play:

final MyClient client;  // Who will get a call back to the their sendResult() method when asynch call finished
ExecutorService executor = Executors.newSingleThreadExecutor(); // Handy way to run code in a thread
Runnable task = new Runnable() { 
    public void run() { // Where the "do the call" code sits
        int result = someService.call(someParamter);
        client.sendResult(result); // For example, expecting an int result
    }
};
executor.submit(task); // This scheduled the runnable to be run
0

精彩评论

暂无评论...
验证码 换一张
取 消