protected <T> Handler<Message<T>> convertHandler(Handler<AsyncResult<Message<T>>> handler) { return reply -> { Future<Message<T>> result; if (reply.body() instanceof ReplyException) { // This is kind of clunky - but hey-ho ReplyException exception = (ReplyException) reply.body(); if (metrics != null) { metrics.replyFailure(reply.address(), exception.failureType()); } result = Future.failedFuture(exception); } else { result = Future.succeededFuture(reply); } handler.handle(result); }; }
@Override public void start() throws Exception { Context ctx = getVertx().getOrCreateContext(); vertices[0].eventBus().send("blah", "blah", ar -> { assertTrue(ar.failed()); if (ar.cause() instanceof ReplyException) { ReplyException cause = (ReplyException) ar.cause(); assertSame(ReplyFailure.NO_HANDLERS, cause.failureType()); } else { fail(ar.cause()); } assertSame(ctx, getVertx().getOrCreateContext()); complete(); }); } }, new DeploymentOptions().setWorker(true));
@Override public void encodeToWire(Buffer buffer, ReplyException body) { buffer.appendByte((byte)body.failureType().toInt()); buffer.appendInt(body.failureCode()); if (body.getMessage() == null) { buffer.appendByte((byte)0); } else { buffer.appendByte((byte)1); byte[] encoded = body.getMessage().getBytes(CharsetUtil.UTF_8); buffer.appendInt(encoded.length); buffer.appendBytes(encoded); } }
private void sendMsg() { if (!unregistered.get()) { getVertx().eventBus().send("whatever", "marseille"); vertx.setTimer(1, id -> { sendMsg(); }); } else { getVertx().eventBus().send("whatever", "marseille", ar -> { Throwable cause = ar.cause(); assertThat(cause, instanceOf(ReplyException.class)); ReplyException replyException = (ReplyException) cause; assertEquals(ReplyFailure.NO_HANDLERS, replyException.failureType()); testComplete(); }); } } };
@Test public void testSendWithTimeoutNoHandlers() { String str = TestUtils.randomUnicodeString(1000); long timeout = 1000; eb.send(ADDRESS1, str, new DeliveryOptions().setSendTimeout(timeout), (AsyncResult<Message<Integer>> ar) -> { assertFalse(ar.succeeded()); Throwable cause = ar.cause(); assertTrue(cause instanceof ReplyException); ReplyException re = (ReplyException) cause; assertEquals(-1, re.failureCode()); assertEquals(ReplyFailure.NO_HANDLERS, re.failureType()); assertEquals("No handlers for address " + ADDRESS1, re.getMessage()); testComplete(); }); await(); }
private void ping(Message<JsonArray> message) { JsonArray jsonArray = message.body(); for (int i = 0; i < jsonArray.size(); i++) { int node = jsonArray.getInteger(i); for (int j = 0; j < numAddresses; j++) { vertx.eventBus().send(createAddress(node, j), "ping", ar -> { if (ar.succeeded()) { vertx.eventBus().send("control", "pong"); } else { Throwable cause = ar.cause(); if (cause instanceof ReplyException) { ReplyException replyException = (ReplyException) cause; if (replyException.failureType() == ReplyFailure.NO_HANDLERS) { vertx.eventBus().send("control", "noHandlers"); return; } } log.error("Unexpected error during ping (id=" + id + ")", cause); } }); } } }
if (ar.cause() instanceof ReplyException) { ReplyException cause = (ReplyException) ar.cause(); assertSame(ReplyFailure.NO_HANDLERS, cause.failureType()); } else { fail(ar.cause()); if (ar.cause() instanceof ReplyException) { ReplyException cause = (ReplyException) ar.cause(); assertSame(ReplyFailure.NO_HANDLERS, cause.failureType()); } else { fail(ar.cause()); if (ar.cause() instanceof ReplyException) { ReplyException cause = (ReplyException) ar.cause(); assertSame(ReplyFailure.NO_HANDLERS, cause.failureType()); } else { fail(ar.cause());
@Test public void testSendWithTimeoutNoReply() { String str = TestUtils.randomUnicodeString(1000); eb.<String>consumer(ADDRESS1).handler((Message<String> msg) -> { assertEquals(str, msg.body()); }); long timeout = 1000; long start = System.currentTimeMillis(); eb.send(ADDRESS1, str, new DeliveryOptions().setSendTimeout(timeout), (AsyncResult<Message<Integer>> ar) -> { long now = System.currentTimeMillis(); assertFalse(ar.succeeded()); Throwable cause = ar.cause(); assertTrue(cause instanceof ReplyException); ReplyException re = (ReplyException) cause; assertEquals(-1, re.failureCode()); assertEquals(ReplyFailure.TIMEOUT, re.failureType()); assertTrue(now - start >= timeout); testComplete(); }); await(); }
@Test public void testSendReplyWithTimeout() { String str = TestUtils.randomUnicodeString(1000); String reply = TestUtils.randomUnicodeString(1000); eb.<String>consumer(ADDRESS1).handler((Message<String> msg) -> { assertEquals(str, msg.body()); long start = System.currentTimeMillis(); long timeout = 1000; msg.reply(reply, new DeliveryOptions().setSendTimeout(timeout), ar -> { long now = System.currentTimeMillis(); assertFalse(ar.succeeded()); Throwable cause = ar.cause(); assertTrue(cause instanceof ReplyException); ReplyException re = (ReplyException) cause; assertEquals(-1, re.failureCode()); assertEquals(ReplyFailure.TIMEOUT, re.failureType()); assertTrue(now - start >= timeout); testComplete(); }); }); eb.send(ADDRESS1, str, onSuccess((Message<String>msg) -> { assertEquals(reply, msg.body()); // Now don't reply })); await(); }
@Test public void testSendWithTimeoutReplyAfterTimeout() { String str = TestUtils.randomUnicodeString(1000); long timeout = 1000; eb.<String>consumer(ADDRESS1).handler((Message<String> msg) -> { assertEquals(str, msg.body()); vertx.setTimer((int)(timeout * 1.5), id -> { msg.reply("too late!"); }); }); eb.send(ADDRESS1, str, new DeliveryOptions().setSendTimeout(timeout), (AsyncResult<Message<Integer>> ar) -> { assertFalse(ar.succeeded()); Throwable cause = ar.cause(); assertTrue(cause instanceof ReplyException); ReplyException re = (ReplyException) cause; assertEquals(-1, re.failureCode()); assertEquals(ReplyFailure.TIMEOUT, re.failureType()); testComplete(); }); await(); }
@Test public void testSendWithTimeoutRecipientFailure() { String str = TestUtils.randomUnicodeString(1000); String failureMsg = TestUtils.randomUnicodeString(1000); int failureCode = 123; eb.<String>consumer(ADDRESS1).handler((Message<String> msg) -> { assertEquals(str, msg.body()); msg.fail(failureCode, failureMsg); }); long timeout = 1000; eb.send(ADDRESS1, str, new DeliveryOptions().setSendTimeout(timeout), (AsyncResult<Message<Integer>> ar) -> { assertFalse(ar.succeeded()); Throwable cause = ar.cause(); assertTrue(cause instanceof ReplyException); ReplyException re = (ReplyException) cause; assertEquals(failureCode, re.failureCode()); assertEquals(failureMsg, re.getMessage()); assertEquals(ReplyFailure.RECIPIENT_FAILURE, re.failureType()); testComplete(); }); await(); }
protected <T> Handler<Message<T>> convertHandler(Handler<AsyncResult<Message<T>>> handler) { return reply -> { Future<Message<T>> result; if (reply.body() instanceof ReplyException) { // This is kind of clunky - but hey-ho ReplyException exception = (ReplyException) reply.body(); if (metrics != null) { metrics.replyFailure(reply.address(), exception.failureType()); } result = Future.failedFuture(exception); } else { result = Future.succeededFuture(reply); } handler.handle(result); }; }
@Override public void start() throws Exception { Context ctx = getVertx().getOrCreateContext(); vertices[0].eventBus().send("blah", "blah", ar -> { assertTrue(ar.failed()); if (ar.cause() instanceof ReplyException) { ReplyException cause = (ReplyException) ar.cause(); assertSame(ReplyFailure.NO_HANDLERS, cause.failureType()); } else { fail(ar.cause()); } assertSame(ctx, getVertx().getOrCreateContext()); complete(); }); } }, new DeploymentOptions().setWorker(true));
@Override public void encodeToWire(Buffer buffer, ReplyException body) { buffer.appendByte((byte)body.failureType().toInt()); buffer.appendInt(body.failureCode()); if (body.getMessage() == null) { buffer.appendByte((byte)0); } else { buffer.appendByte((byte)1); byte[] encoded = body.getMessage().getBytes(CharsetUtil.UTF_8); buffer.appendInt(encoded.length); buffer.appendBytes(encoded); } }
private void sendMsg() { if (!unregistered.get()) { getVertx().eventBus().send("whatever", "marseille"); vertx.setTimer(1, id -> { sendMsg(); }); } else { getVertx().eventBus().send("whatever", "marseille", ar -> { Throwable cause = ar.cause(); assertThat(cause, instanceOf(ReplyException.class)); ReplyException replyException = (ReplyException) cause; assertEquals(ReplyFailure.NO_HANDLERS, replyException.failureType()); testComplete(); }); } } };
private void ping(Message<JsonArray> message) { JsonArray jsonArray = message.body(); for (int i = 0; i < jsonArray.size(); i++) { int node = jsonArray.getInteger(i); for (int j = 0; j < numAddresses; j++) { vertx.eventBus().send(createAddress(node, j), "ping", ar -> { if (ar.succeeded()) { vertx.eventBus().send("control", "pong"); } else { Throwable cause = ar.cause(); if (cause instanceof ReplyException) { ReplyException replyException = (ReplyException) cause; if (replyException.failureType() == ReplyFailure.NO_HANDLERS) { vertx.eventBus().send("control", "noHandlers"); return; } } log.error("Unexpected error during ping (id=" + id + ")", cause); } }); } } }
@Test public void testSendWithTimeoutNoReply() { String str = TestUtils.randomUnicodeString(1000); eb.<String>consumer(ADDRESS1).handler((Message<String> msg) -> { assertEquals(str, msg.body()); }); long timeout = 1000; long start = System.currentTimeMillis(); eb.send(ADDRESS1, str, new DeliveryOptions().setSendTimeout(timeout), (AsyncResult<Message<Integer>> ar) -> { long now = System.currentTimeMillis(); assertFalse(ar.succeeded()); Throwable cause = ar.cause(); assertTrue(cause instanceof ReplyException); ReplyException re = (ReplyException) cause; assertEquals(-1, re.failureCode()); assertEquals(ReplyFailure.TIMEOUT, re.failureType()); assertTrue(now - start >= timeout); testComplete(); }); await(); }
@Test public void testSendWithTimeoutNoHandlers() { String str = TestUtils.randomUnicodeString(1000); long timeout = 1000; eb.send(ADDRESS1, str, new DeliveryOptions().setSendTimeout(timeout), (AsyncResult<Message<Integer>> ar) -> { assertFalse(ar.succeeded()); Throwable cause = ar.cause(); assertTrue(cause instanceof ReplyException); ReplyException re = (ReplyException) cause; assertEquals(-1, re.failureCode()); assertEquals(ReplyFailure.NO_HANDLERS, re.failureType()); assertEquals("No handlers for address " + ADDRESS1, re.getMessage()); testComplete(); }); await(); }
@Test public void testSendWithTimeoutReplyAfterTimeout() { String str = TestUtils.randomUnicodeString(1000); long timeout = 1000; eb.<String>consumer(ADDRESS1).handler((Message<String> msg) -> { assertEquals(str, msg.body()); vertx.setTimer((int)(timeout * 1.5), id -> { msg.reply("too late!"); }); }); eb.send(ADDRESS1, str, new DeliveryOptions().setSendTimeout(timeout), (AsyncResult<Message<Integer>> ar) -> { assertFalse(ar.succeeded()); Throwable cause = ar.cause(); assertTrue(cause instanceof ReplyException); ReplyException re = (ReplyException) cause; assertEquals(-1, re.failureCode()); assertEquals(ReplyFailure.TIMEOUT, re.failureType()); testComplete(); }); await(); }
@Test public void testSendWithTimeoutRecipientFailure() { String str = TestUtils.randomUnicodeString(1000); String failureMsg = TestUtils.randomUnicodeString(1000); int failureCode = 123; eb.<String>consumer(ADDRESS1).handler((Message<String> msg) -> { assertEquals(str, msg.body()); msg.fail(failureCode, failureMsg); }); long timeout = 1000; eb.send(ADDRESS1, str, new DeliveryOptions().setSendTimeout(timeout), (AsyncResult<Message<Integer>> ar) -> { assertFalse(ar.succeeded()); Throwable cause = ar.cause(); assertTrue(cause instanceof ReplyException); ReplyException re = (ReplyException) cause; assertEquals(failureCode, re.failureCode()); assertEquals(failureMsg, re.getMessage()); assertEquals(ReplyFailure.RECIPIENT_FAILURE, re.failureType()); testComplete(); }); await(); }