public static <T> Single<T> rxGetProxy(ServiceDiscovery discovery, Class<T> clientClass, Function<Record, Boolean> filter) { return new io.vertx.reactivex.core.impl.AsyncResultSingle<>(handler -> EventBusService.getServiceProxy(discovery, filter, clientClass, handler) ); } }
@Override public void start() { ServiceDiscovery.create(vertx, discovery -> { this.discovery = discovery; // Create the service object PortfolioServiceImpl service = new PortfolioServiceImpl(vertx, discovery, config().getDouble("money", 10000.00)); // Register the service proxy on the event bus ProxyHelper.registerService(PortfolioService.class, vertx.getDelegate(), service, ADDRESS); Record record = EventBusService.createRecord("portfolio", ADDRESS, PortfolioService.class.getName()); discovery.publish(record, ar -> { if (ar.succeeded()) { this.record = record; System.out.println("Portfolio service published"); // Used for health check vertx.createHttpServer().requestHandler(req -> req.response().end("OK")).listen(8080); } else { ar.cause().printStackTrace(); } }); }); }
/** * Method to check the proxy requesting to convert the current portfolio to EUR. * * @param rc the routing context */ private void convertPortfolioToEuro(RoutingContext rc) { EventBusService.getServiceProxy(discovery, svc -> svc.getName().equals("portfolio"), PortfolioService.class, ar -> { if (ar.failed()) { rc.fail(ar.cause()); } else { ar.result().evaluate(res -> { if (res.failed()) { rc.fail(res.cause()); } else { JsonObject payload = new JsonObject().put("amount", res.result()).put("currency", "EUR"); rc.setBody(new Buffer(payload.toBuffer())); delegateWithCircuitBreaker(rc); } }); } }); } }
EventBusService.getServiceProxy(discovery, record -> record.getName().equalsIgnoreCase("my-service"), HelloService.class,