Skip to content

Instantly share code, notes, and snippets.

@jklingsporn
Last active September 21, 2020 11:54
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jklingsporn/cab628f45448b78dbd9d2f20dcfd6ae9 to your computer and use it in GitHub Desktop.
Save jklingsporn/cab628f45448b78dbd9d2f20dcfd6ae9 to your computer and use it in GitHub Desktop.
After both handlers have been registered and received a message the unregistration of the second handler fails
import com.hazelcast.core.Hazelcast;
import io.vertx.core.Promise;
import io.vertx.core.Vertx;
import io.vertx.core.VertxOptions;
import io.vertx.core.eventbus.MessageConsumer;
import io.vertx.spi.cluster.hazelcast.HazelcastClusterManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author jensklingsporn
*/
class SimpleClusterConnector {
private static final Logger logger = LoggerFactory.getLogger(SimpleClusterConnector.class);
public static void main(String[] args) {
Promise<Vertx> boot = Promise.promise();
HazelcastClusterManager clusterManager = new HazelcastClusterManager(Hazelcast.newHazelcastInstance());
Vertx.clusteredVertx(new VertxOptions().setClusterManager(clusterManager), boot);
boot.future().compose(vertx -> {
Promise<Void> reg1 = createOneShotHandler(vertx, true);
Promise<Void> reg2 = createOneShotHandler(vertx, false);
return reg1.future().compose(v -> reg2.future()).onSuccess(v -> vertx.eventBus().publish("test", "foo"));
})
.onFailure(x -> logger.error(x.getMessage(), x));
}
private static Promise<Void> createOneShotHandler(Vertx vertx, boolean local) {
Promise<Void> reg1 = Promise.promise();
Promise<Void> dereg1 = Promise.promise();
MessageConsumer<Object> consumer1 = local ? vertx.eventBus().localConsumer("test") : vertx.eventBus().consumer("test");
consumer1.completionHandler(reg1);
consumer1.handler(handler -> {
logger.info("handled");
consumer1.unregister(dereg1);
});
dereg1.future().onFailure(x -> logger.error(x.getMessage(), x)).onSuccess(v -> logger.info("unregistration complete"));
return reg1;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment