I am starting to experiment with Vert.x and use the examples code. I got 1 main verticle (HTTP front-end) which calls two worker verticles that are doing some blocking work. The verticles communicate via EventBus. Everything work, but I am getting duplicate request/reply. Could you please help?
public class Main extends AbstractVerticle {
public static void main(String[] args) {
VertxOptions vOptions = new VertxOptions();
vOptions.setWorkerPoolSize(10);
Vertx vertx = Vertx.vertx(vOptions);
DeploymentOptions options = new DeploymentOptions().setWorker(true);
vertx.deployVerticle(new MainVertical(), options);
options = new DeploymentOptions().setWorker(false);
vertx.deployVerticle(new WorkerVertical(), options);
}
}
public class MainVertical extends AbstractVerticle {
@Override
public void start(Future<Void> fut) {
HttpServer server = vertx.createHttpServer();
Router router = Router.router(vertx);
router.route().blockingHandler(
routingContext -> {
StringBuffer ret = new StringBuffer();
HttpServerResponse response = routingContext.response();
String requestToWorker = "hi worker";
System.out.println("[Main] Sending request '" + requestToWorker + "' in " + Thread.currentThread().getName());
vertx.eventBus().send("worker.verticle", requestToWorker, replyFromWorker -> {
System.out.println("[Main] Receiving reply ' " + replyFromWorker.result().body()+ "' in "+ Thread.currentThread().getName());
});
System.out.println(ret.toString());
response.putHeader("content-type", "text/plain");
response.end(ret.toString());
}, false);
server.requestHandler(router::accept).listen(8080);
System.out.println(Thread.currentThread().getName()+ " HTTP server started");
}
}
public class WorkerVertical extends AbstractVerticle {
@Override
public void start(Future<Void> fut) {
vertx.eventBus().consumer("worker.verticle",message -> {
System.out.println("[Worker] Consuming data in " + Thread.currentThread().getName());
String body = (String) message.body();
message.reply(body.toUpperCase());
});
}
}
As you can see in the code, I am sending 2 message to the Worker, but after running "curl localhost:8080", I see two sends and two receives::
[Main] Sending request 'hi worker' in vert.x-worker-thread-76
[Worker] Consuming data in vert.x-eventloop-thread-4
[Main] Receiving reply ' HI WORKER' in vert.x-worker-thread-58
Beginning
[Main] Sending request 'hi worker' in vert.x-worker-thread-7
[Worker] Consuming data in vert.x-eventloop-thread-4
[Main] Receiving reply ' HI WORKER' in vert.x-worker-thread-7
Thank you in advance.