Skip to main content

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);
}
}