package io.vertx.example.sync.eventbus.pingpong; import co.paralleluniverse.fibers.Suspendable; import co.paralleluniverse.strands.Strand; import io.vertx.core.eventbus.EventBus; import io.vertx.core.eventbus.Message; import io.vertx.example.util.Runner; import io.vertx.ext.sync.SyncVerticle; import static io.vertx.ext.sync.Sync.*; /** * * Example showing synchronous request / response of messages over the event bus * * @author <a href="http://tfox.org">Tim Fox</a> */ public class PingPong extends SyncVerticle { private static final String ADDRESS = "ping-address"; /* Convenience method so you can run it in your IDE Note if in IDE need to edit run settings and add: -javaagent:/home/tim/.m2/repository/co/paralleluniverse/quasar-core/0.7.2/quasar-core-0.7.2.jar */ public static void main(String[] args) { Runner.runExample(PingPong.class); } @Suspendable @Override public void start() throws Exception { EventBus eb = vertx.eventBus(); eb.consumer(ADDRESS).handler(msg -> msg.reply("pong")); // This runs on an event loop but the event loop is at no time blocked! for (int i = 0; i < 10; i++) { System.out.println("Thread is " + Thread.currentThread()); Message<String> reply = awaitResult(h -> eb.send(ADDRESS, "ping", h)); System.out.println("got reply: " + reply.body()); // Like Thread.sleep but doesn't block the OS thread Strand.sleep(1000); } } }