Hi,
I'm trying to develop a worker Verticle that needs to do out-of-process calls.
When I run the Verticle, everything works fine.
However, when I add the "-worker" switch to tell VertX to run it as a worker, I don't seem to be able to reply to any messages or publish to the event bus from within the Verticle without getting the following exception...
Exception in Java verticle script
java.lang.IllegalStateException: Cannot be used in a worker application
at org.vertx.java.core.net.impl.DefaultNetClient.<init>(DefaultNetClient.java:61)
at org.vertx.java.core.impl.DefaultVertx.createNetClient(DefaultVertx.java:106)
at org.vertx.java.core.eventbus.impl.DefaultEventBus.sendRemote(DefaultEventBus.java:494)
at org.vertx.java.core.eventbus.impl.DefaultEventBus.sendOrPub(DefaultEventBus.java:363)
at org.vertx.java.core.eventbus.impl.DefaultEventBus.sendReply(DefaultEventBus.java:295)
at org.vertx.java.core.eventbus.impl.BaseMessage.reply(BaseMessage.java:53)
at org.vertx.java.core.eventbus.Message.reply(Message.java:58)
at org.vertx.java.busmods.BusModBase.sendStatus(BusModBase.java:60)
at org.vertx.java.busmods.BusModBase.sendOK(BusModBase.java:64)
at com.vcint.mdss.worker.EchoVerticle.access$0(EchoVerticle.java:1)
at com.vcint.mdss.worker.EchoVerticle$1.handle(EchoVerticle.java:20)
(All my toy Verticle does at the moment is reply to the message with what was originally sent)
Does this mean that workers can't reply to or publish messages (!!!!!????????!???? - this can't be right!!!!)
I found some source code for a "memcache" BusMod and it says it should be run as a worker. That sends replies to messages, so I must be going insane...
I also read in the documentation that...
"Worker verticles are also not allowed to use TCP or HTTP clients or servers"
Have I misunderstood something?? (Most JDBC drivers are TCP clients...)
public class DeployVerticle extends Verticle {
@Override
public void start() throws Exception {
Handler<String> handler = new Handler<String>() {
@Override
public void handle(String event) {
}
};
UUID uuid = UUID.randomUUID();
JsonObject config = new JsonObject();
config.putString("targetAddress", uuid.toString());
System.out.println("Worker address: " + uuid);
container.deployVerticle(ProxyVerticle.class.getName(), config, 1, handler);
System.out.println("DEPLOYED FIRST");
container.deployWorkerVerticle(EchoVerticle.class.getName(), config, 1, handler);
System.out.println("DEPLOYED SECOND");
}
}
public class ProxyVerticle extends Verticle {
@Override
public void start() throws Exception {
System.out.println("START PROXY");
final EventBus eventBus = vertx.eventBus();
eventBus.registerHandler("proxy", new Handler<Message<JsonObject>>() {
@Override
public void handle(final Message<JsonObject> event) {
System.out.println("PROXY: Got a message " + event.body);
eventBus.send(getContainer().getConfig().getString("targetAddress"), event.body, new Handler<Message<JsonObject>>() {
@Override
public void handle(Message<JsonObject> reply) {
System.out.println("PROXY: SEND REPLY");
event.reply(reply.body);
}
});
}
});
}
}
public class EchoVerticle extends Verticle {
@Override
public void start() {
System.out.println("DEPLOYING ECHO");
vertx.eventBus().registerHandler(getContainer().getConfig().getString("targetAddress"), new Handler<Message<JsonObject>>() {
@Override
public void handle(Message<JsonObject> event) {
System.out.println("GOT " + event.body + ", SENDING REPLY");
event.reply(event.body);
}
}, new AsyncResultHandler<Void>() {
@Override
public void handle(AsyncResult<Void> event) {
System.out.println("REGISTERED!!");
}
});
}
}
--
You received this message because you are subscribed to the Google Groups "vert.x" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vertx+un...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
container.deployWorkerVerticle("de.isogmbh.ad.verticle.DatabaseWorker", new JsonObject(), config.getInteger("vertx.worker.instances"), new Handler<String>() { @Override public void handle(String arg0) { container.getLogger().info("Database Worker Deployed"); container.getLogger().info("Deploy finished"); }});container.deployVerticle("de.isogmbh.ad.verticle.HttpServer", new JsonObject(), config.getInteger("vertx.http.instances"), new Handler<String>() { @Override public void handle(String arg0) { container.getLogger().info("Http Server Deployed"); }});