Из того, что я видел, Vert.x EventBus не отбрасывает сообщения для локальных потребителей.
Хотя в документации говорится, что DEFAULT_ACCEPT_BACKLOG
установлено на 1024, на самом деле это -1:
https://github.com/eclipse-vertx/vert.x/blob/1ab9884cb29adea75b378c3fa7359813f3de68f9/src/main/java/io/vertx/core/net/NetServerOptions.java#L45
И я не вижу, чтобы он использовался где-либо для ограничения размера EventBus.
Вы также можете использовать этот тест, чтобы убедиться, что все сообщения фактически приходят:
public class BackpressureExample {
public static void main(String[] args) {
Vertx vertx = Vertx.vertx(new VertxOptions().setEventBusOptions(new EventBusOptions().setAcceptBacklog(1)));
vertx.deployVerticle(new SlowConsumer(), new DeploymentOptions().setWorker(true), h -> {
for (int i = 0; i < 10_000; i++) {
vertx.eventBus().send("address", UUID.randomUUID().toString());
}
System.out.println("Done producing");
});
}
private static class SlowConsumer extends AbstractVerticle {
@Override
public void start() {
AtomicInteger counter = new AtomicInteger();
this.vertx.eventBus().consumer("address", h -> {
System.out.println(counter.incrementAndGet());
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
}
}
}
Вы можете посмотреть, как сообщения доставляются местным потребителям здесь: https://github.com/eclipse-vertx/vert.x/blob/master/src/main/java/io/vertx/core/eventbus/impl/EventBusImpl.java#L359