Zygmuntix
Zygmuntix

Reputation: 359

How to use Vertx EventBus to send messages between Verticles?

I am currently maintaining application written in Java with Vertx framework. I would like to implement sending messages between 2 application instances (primary and secondary) using EventBus (over the network). Is it possible? In the Vertx documentation I do not see the example how I can achieve that. https://vertx.io/docs/vertx-core/java/#event_bus I see that there are send(...) methods in EventBus with address - but address can be any String. I would like to publish the events to another application instance (for example from Primary to Secondary).

Upvotes: 0

Views: 265

Answers (1)

tsegismont
tsegismont

Reputation: 9138

It is possible using a Vert.x cluster manager.

Choose one of the supported cluster managers in the classpath of your application.

In your main method, instead of creating a standalone Vertx instance, create a clustered one:

Vertx.clusteredVertx(new VertxOptions(), res -> {
  if (res.succeeded()) {
    Vertx vertx = res.result();
  } else {
    // failed!
  }
});

Deploy a receiver:

public class Receiver extends AbstractVerticle {

  @Override
  public void start() throws Exception {

    EventBus eb = vertx.eventBus();

    eb.consumer("ping-address", message -> {

      System.out.println("Received message: " + message.body());
      // Now send back reply
      message.reply("pong!");
    });

    System.out.println("Receiver ready!");
  }
}

In a separate JVM, deploy a sender:

public class Sender extends AbstractVerticle {

  @Override
  public void start() throws Exception {
    EventBus eb = vertx.eventBus();

    // Send a message every second

    vertx.setPeriodic(1000, v -> {

      eb.request("ping-address", "ping!", reply -> {
        if (reply.succeeded()) {
          System.out.println("Received reply " + reply.result().body());
        } else {
          System.out.println("No reply");
        }
      });

    });
  }
}

That's it for the basics. You may need to follow individual cluster manager configuration instructions in the docs.

Upvotes: 1

Related Questions