public void start(final Future<Void> startResult) {
// Deploy a "default" cluster. This will deploy a single node cluster.
// If the current Vert.x instance is a Hazelcast clustered instance,
// the cluster will coordinate through Hazelcast data structures,
// otherwise the cluster will coordinate through Vert.x shared data.
final Vertigo vertigo = new Vertigo(this);
vertigo.deployCluster("default", new Handler<AsyncResult<Cluster>>() {
public void handle(AsyncResult<Cluster> result) {
if (result.failed()) {
startResult.setFailure(result.cause());
} else {
// The cluster is used to deploy, undeploy, and
// reconfigure networks in a cluster.
Cluster cluster = result.result();
// Create a new network configuration. This network uses
// circular connections to send "ack" messages back to the
// FaultTolerantFeeder from the MessageReceiver.
NetworkConfig network = vertigo.createNetwork("fault-tolerant");
network.addVerticle("sender", FaultTolerantFeeder.class.getName());
network.addVerticle("receiver", MessageReceiver.class.getName());
network.createConnection("sender", "out", "receiver", "in");
network.createConnection("receiver", "ack", "sender", "ack");