Asynchronous Write
The async put()
method takes extra event loop and write listener arguments. The listener is called when the put()
completes.
Initiate the Write
import com.aerospike.client.async.EventLoop;
import com.aerospike.client.async.EventLoops;
// Find an event loop from eventLoops created in connect example.
EventLoop eventLoop = eventLoops.next();
// Write a single value.
WritePolicy policy = new WritePolicy();
Key key = new Key("test", "myset", "mykey");
Bin bin = new Bin("mybin", "myvalue");
client.put(eventLoop, new WriteHandler(), policy, key, bin);
Completion Handler
When the database returns from the write
command, either onSuccess
or onFailure
is called.
private class WriteHandler implements WriteListener {
@Override
public void onSuccess(Key key) {
try {
// Write succeeded. Now do something else.
client.get(eventLoop, new ReadHandler(), policy, key);
}
catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onFailure(AerospikeException e) {
e.printStackTrace();
}
}
AerospikeClient methods require event loops that conform to the Aerospike EventLoop interface. If using a Netty event loop directly, a compatible event loop can be obtained by methods on an NettyEventLoops instance. Here is an example:
import com.aerospike.client.AerospikeClient;
import com.aerospike.client.Bin;
import com.aerospike.client.Key;
import com.aerospike.client.async.EventLoop;
import com.aerospike.client.async.NettyEventLoops;
import com.aerospike.client.policy.WritePolicy;
public class MyWriter {
private NettyEventLoops eventLoops;
public MyWriter(NettyEventLoops eventLoops) {
this.eventLoops = eventLoops;
}
public void write(io.netty.channel.EventLoop nettyLoop, AerospikeClient client, WritePolicy policy, Key key, Bin bin) {
EventLoop eventLoop = eventLoops.get(nettyLoop);
client.put(eventLoop, new WriteHandler(), policy, key, bin);
}
}