@Override public void unpublish(String id, Handler<AsyncResult<Void>> resultHandler) { backend.remove(id, record -> { if (record.failed()) { resultHandler.handle(Future.failedFuture(record.cause())); return; } for (ServiceExporter exporter : exporters) { exporter.onUnpublish(id); } Record announcedRecord = new Record(record.result()); announcedRecord .setRegistration(null) .setStatus(Status.DOWN); vertx.eventBus().publish(announce, announcedRecord.toJson()); resultHandler.handle(Future.succeededFuture()); }); }
@Override public void getRecords(Function<Record, Boolean> filter, boolean includeOutOfService, Handler<AsyncResult<List<Record>>> resultHandler) { Objects.requireNonNull(filter); backend.getRecords(list -> { if (list.failed()) { resultHandler.handle(Future.failedFuture(list.cause())); } else { resultHandler.handle(Future.succeededFuture( list.result().stream() .filter(filter::apply) .filter(record -> includeOutOfService || record.getStatus() == Status.UP) .collect(Collectors.toList()) )); } }); }
@Override public void update(Record record, Handler<AsyncResult<Record>> resultHandler) { backend.update(record, ar -> { if (ar.failed()) { resultHandler.handle(Future.failedFuture(ar.cause())); } else { resultHandler.handle(Future.succeededFuture(record)); } }); for (ServiceExporter exporter : exporters) { exporter.onUpdate(record); } Record announcedRecord = new Record(record); vertx.eventBus().publish(announce, announcedRecord.toJson()); }
backend.store(record, ar -> { if (!ar.succeeded()) { ar.cause().printStackTrace(); backend.getRecord(record.getRegistration(), ar -> reference.set(ar.result())); await().until(() -> reference.get() != null); assertThat(reference.get().getName()).isEqualToIgnoringCase("my-service"); backend.remove(record, ar -> { completed.set(ar.succeeded()); }); backend.getRecord(record.getRegistration(), ar -> { if (!ar.succeeded()) { ar.cause().printStackTrace();
backend.store(record, ar -> { if (!ar.succeeded()) { ar.cause().printStackTrace(); backend.getRecord(record.getRegistration(), ar -> reference.set(ar.result())); await().until(() -> reference.get() != null); assertThat(reference.get().getName()).isEqualToIgnoringCase("my-service"); backend.update(record, ar -> { completed.set(ar.succeeded()); }); backend.getRecord(record.getRegistration(), ar -> reference.set(ar.result())); await().until(() -> reference.get() != null); assertThat(reference.get().getName()).isEqualToIgnoringCase("my-service"); backend.remove(record, ar -> { completed.set(ar.succeeded()); }); backend.getRecord(record.getRegistration(), ar -> { if (!ar.succeeded()) { ar.cause().printStackTrace();
backend.store(record1, ar -> { backend.store(record2, ar2 -> { backend.store(record3, ar3 -> { completed.set(ar3.succeeded()); }); backend.getRecords(ar -> { records.addAll(ar.result()); }); backend.getRecord(record.getRegistration(), ar -> retrieved.set(ar.result())); await().untilAtomic(retrieved, not(nullValue()));
@Override public void publish(Record record, Handler<AsyncResult<Record>> resultHandler) { Status status = record.getStatus() == null || record.getStatus() == Status.UNKNOWN ? Status.UP : record.getStatus(); backend.store(record.setStatus(status), ar -> { if (ar.failed()) { resultHandler.handle(Future.failedFuture(ar.cause())); return; } for (ServiceExporter exporter : exporters) { exporter.onPublish(new Record(ar.result())); } Record announcedRecord = new Record(ar.result()); announcedRecord .setRegistration(null) .setStatus(status); vertx.eventBus().publish(announce, announcedRecord.toJson()); resultHandler.handle(Future.succeededFuture(ar.result())); }); }
/** * Creates a new instance of {@link DiscoveryImpl} * * @param vertx the vert.x instance * @param options the options * @param backend the backend service */ DiscoveryImpl(Vertx vertx, ServiceDiscoveryOptions options, ServiceDiscoveryBackend backend) { this.vertx = vertx; this.announce = options.getAnnounceAddress(); this.usage = options.getUsageAddress(); this.backend = backend; this.backend.init(vertx, options.getBackendConfiguration()); this.id = options.getName() != null ? options.getName() : getNodeId(vertx); this.options = options; }
private static ServiceDiscoveryBackend getBackend(String maybeName) { ServiceLoader<ServiceDiscoveryBackend> backends = ServiceLoader.load(ServiceDiscoveryBackend.class); Iterator<ServiceDiscoveryBackend> iterator = backends.iterator(); if (maybeName == null) { if (!iterator.hasNext()) { return new DefaultServiceDiscoveryBackend(); } else { return iterator.next(); } } if (maybeName.equals(DefaultServiceDiscoveryBackend.class.getName())) { return new DefaultServiceDiscoveryBackend(); } // We have a name while (iterator.hasNext()) { ServiceDiscoveryBackend backend = iterator.next(); if (backend.name().equals(maybeName)) { return backend; } } throw new IllegalStateException("Cannot find the discovery backend implementation with name " + maybeName + " in " + "the classpath"); }
backend.store(record, ar -> { if (!ar.succeeded()) { ar.cause().printStackTrace(); backend.getRecord(record.getRegistration(), ar -> reference.set(ar.result())); await().until(() -> reference.get() != null); assertThat(reference.get().getName()).isEqualToIgnoringCase("my-service"); backend.remove(record, ar -> { completed.set(ar.succeeded()); }); backend.getRecord(record.getRegistration(), ar -> { if (!ar.succeeded()) { ar.cause().printStackTrace();
backend.store(record, ar -> { if (!ar.succeeded()) { ar.cause().printStackTrace(); backend.getRecord(record.getRegistration(), ar -> reference.set(ar.result())); await().until(() -> reference.get() != null); assertThat(reference.get().getName()).isEqualToIgnoringCase("my-service"); backend.update(record, ar -> { completed.set(ar.succeeded()); }); backend.getRecord(record.getRegistration(), ar -> reference.set(ar.result())); await().until(() -> reference.get() != null); assertThat(reference.get().getName()).isEqualToIgnoringCase("my-service"); backend.remove(record, ar -> { completed.set(ar.succeeded()); }); backend.getRecord(record.getRegistration(), ar -> { if (!ar.succeeded()) { ar.cause().printStackTrace();
backend.store(record1, ar -> { backend.store(record2, ar2 -> { backend.store(record3, ar3 -> { completed.set(ar3.succeeded()); }); backend.getRecords(ar -> { records.addAll(ar.result()); }); backend.getRecord(record.getRegistration(), ar -> retrieved.set(ar.result())); await().untilAtomic(retrieved, not(nullValue()));
@Override public void publish(Record record, Handler<AsyncResult<Record>> resultHandler) { Status status = record.getStatus() == null || record.getStatus() == Status.UNKNOWN ? Status.UP : record.getStatus(); backend.store(record.setStatus(status), ar -> { if (ar.failed()) { resultHandler.handle(Future.failedFuture(ar.cause())); return; } for (ServiceExporter exporter : exporters) { exporter.onPublish(new Record(ar.result())); } Record announcedRecord = new Record(ar.result()); announcedRecord .setRegistration(null) .setStatus(status); vertx.eventBus().publish(announce, announcedRecord.toJson()); resultHandler.handle(Future.succeededFuture(ar.result())); }); }
/** * Creates a new instance of {@link DiscoveryImpl} * * @param vertx the vert.x instance * @param options the options * @param backend the backend service */ DiscoveryImpl(Vertx vertx, ServiceDiscoveryOptions options, ServiceDiscoveryBackend backend) { this.vertx = vertx; this.announce = options.getAnnounceAddress(); this.usage = options.getUsageAddress(); this.backend = backend; this.backend.init(vertx, options.getBackendConfiguration()); this.id = options.getName() != null ? options.getName() : getNodeId(vertx); this.options = options; }
private static ServiceDiscoveryBackend getBackend(String maybeName) { ServiceLoader<ServiceDiscoveryBackend> backends = ServiceLoader.load(ServiceDiscoveryBackend.class); Iterator<ServiceDiscoveryBackend> iterator = backends.iterator(); if (maybeName == null) { if (!iterator.hasNext()) { return new DefaultServiceDiscoveryBackend(); } else { return iterator.next(); } } if (maybeName.equals(DefaultServiceDiscoveryBackend.class.getName())) { return new DefaultServiceDiscoveryBackend(); } // We have a name while (iterator.hasNext()) { ServiceDiscoveryBackend backend = iterator.next(); if (backend.name().equals(maybeName)) { return backend; } } throw new IllegalStateException("Cannot find the discovery backend implementation with name " + maybeName + " in " + "the classpath"); }
backend.store(record, ar -> { if (!ar.succeeded()) { ar.cause().printStackTrace(); backend.getRecord(record.getRegistration(), ar -> reference.set(ar.result())); await().until(() -> reference.get() != null); assertThat(reference.get().getName()).isEqualToIgnoringCase("my-service"); backend.getRecord(record.getRegistration(), ar -> error.set(ar.cause())); await().until(() -> error.get() != null); assertThat(error.get()).isInstanceOf(KeeperException.ConnectionLossException.class); backend.getRecord(record.getRegistration(), ar -> { if (ar.failed()) { ar.cause().printStackTrace(); backend.remove(record, ar -> completed.set(ar.failed())); await().untilAtomic(completed, is(true)); backend.remove(record, ar -> completed.set(ar.succeeded())); await().untilAtomic(completed, is(true));
@Override public void unpublish(String id, Handler<AsyncResult<Void>> resultHandler) { backend.remove(id, record -> { if (record.failed()) { resultHandler.handle(Future.failedFuture(record.cause())); return; } for (ServiceExporter exporter : exporters) { exporter.onUnpublish(id); } Record announcedRecord = new Record(record.result()); announcedRecord .setRegistration(null) .setStatus(Status.DOWN); vertx.eventBus().publish(announce, announcedRecord.toJson()); resultHandler.handle(Future.succeededFuture()); }); }
@Override public void getRecords(Function<Record, Boolean> filter, boolean includeOutOfService, Handler<AsyncResult<List<Record>>> resultHandler) { Objects.requireNonNull(filter); backend.getRecords(list -> { if (list.failed()) { resultHandler.handle(Future.failedFuture(list.cause())); } else { resultHandler.handle(Future.succeededFuture( list.result().stream() .filter(filter::apply) .filter(record -> includeOutOfService || record.getStatus() == Status.UP) .collect(Collectors.toList()) )); } }); }
@Override public void update(Record record, Handler<AsyncResult<Record>> resultHandler) { backend.update(record, ar -> { if (ar.failed()) { resultHandler.handle(Future.failedFuture(ar.cause())); } else { resultHandler.handle(Future.succeededFuture(record)); } }); for (ServiceExporter exporter : exporters) { exporter.onUpdate(record); } Record announcedRecord = new Record(record); vertx.eventBus().publish(announce, announcedRecord.toJson()); }
backend.store(record, ar -> { if (!ar.succeeded()) { ar.cause().printStackTrace(); backend.getRecord(record.getRegistration(), ar -> reference.set(ar.result())); await().until(() -> reference.get() != null); assertThat(reference.get().getName()).isEqualToIgnoringCase("my-service"); backend.getRecord(record.getRegistration(), ar -> error.set(ar.cause())); await().until(() -> error.get() != null); assertThat(error.get()).isInstanceOf(KeeperException.ConnectionLossException.class); backend.getRecord(record.getRegistration(), ar -> { if (ar.failed()) { ar.cause().printStackTrace(); backend.remove(record, ar -> completed.set(ar.failed())); await().untilAtomic(completed, is(true)); backend.remove(record, ar -> completed.set(ar.succeeded())); await().untilAtomic(completed, is(true));