package io.vertx.example.service.discovery;
import io.vertx.core.AbstractVerticle;
import io.vertx.core.Vertx;
import io.vertx.core.http.HttpClient;
import io.vertx.core.json.JsonObject;
import io.vertx.servicediscovery.Record;
import io.vertx.servicediscovery.ServiceDiscovery;
import io.vertx.servicediscovery.ServiceDiscoveryOptions;
import io.vertx.servicediscovery.ServiceReference;
import io.vertx.servicediscovery.types.HttpEndpoint;
public class ServiceDiscoveryVerticle extends AbstractVerticle {
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
vertx.deployVerticle(ServiceDiscoveryVerticle.class.getName());
}
@Override
public void start() {
ServiceDiscovery discovery = ServiceDiscovery.create(vertx,
new ServiceDiscoveryOptions()
.setAnnounceAddress("service-announce")
.setName("my-name"));
//create a new custom record
Record record1 = new Record()
.setType("eventbus-service-proxy")
.setLocation(new JsonObject().put("endpoint", "the-service-address"))
.setName("my-service")
.setMetadata(new JsonObject().put("some-label", "some-value"));
//publish "my-service" service
discovery.publish(record1, ar -> {
if (ar.succeeded()) {
System.out.println("\"" + record1.getName() + "\" successfully published!");
Record publishedRecord = ar.result();
} else {
// publication failed
}
});
// create a record from type
Record record2 = HttpEndpoint.createRecord("some-rest-api", "localhost", 8080, "/api");
//publish the service
discovery.publish(record2, ar -> {
if (ar.succeeded()) {
System.out.println("\"" + record2.getName() + "\" successfully published!");
Record publishedRecord = ar.result();
} else {
// publication failed
}
});
//unpublish "my-service"
discovery.unpublish(record1.getRegistration(), ar -> {
if (ar.succeeded()) {
System.out.println("\"" + record1.getName() + "\" successfully unpublished");
} else {
// cannot un-publish the service, may have already been removed, or the record is not published
}
});
//consuming a service
discovery.getRecord(r -> r.getName().equals(record2.getName()), ar -> {
if (ar.succeeded()) {
if (ar.result() != null) {
// Retrieve the service reference
ServiceReference reference = discovery.getReference(ar.result());
// Retrieve the service object
HttpClient client = reference.get();
System.out.println("Consuming \"" + record2.getName() + "\"");
client.getNow("/api", response -> {
//release the service
reference.release();
});
}
}
});
discovery.close();
}
}