docs: public static void main(String[] args) throws InterruptedException {
  
      Microservices gateway =
          Microservices.builder()
              .discovery(ScalecubeServiceDiscovery::new)
              .transport(ServiceTransports::rsocketServiceTransport)
              .startAwait();
  
      Microservices ms =
          Microservices.builder()
              .discovery(
                  serviceEndpoint -> serviceDiscovery(serviceEndpoint, gateway.discovery().address()))
              .transport(ServiceTransports::rsocketServiceTransport)
              .services(new DefaultMarketDataService())
              .startAwait();
  
      MarketDataService marketService = ms.call().api(MarketDataService.class);
  
      marketService.orderBook().subscribe(Example1::print);
  
      Executors.newScheduledThreadPool(1)
          .scheduleAtFixedRate(
              () -> {
                try {
  
                  if (RANDOM.nextInt(2) == 1) {
                    marketService
                        .processOrder(
                            new OrderRequest(
                                new Order(
                                    new PriceLevel(Side.BUY, RANDOM.nextInt(10) + 1), // prices
                                    System.currentTimeMillis(),
                                    Long.valueOf(RANDOM.nextInt(110) + 1 + "")), // units
                                INSTRUMENT))
                        .block();
                  } else {
                    marketService
                        .processOrder(
                            new OrderRequest(
                                new Order(
                                    new PriceLevel(Side.SELL, RANDOM.nextInt(10) + 1), // prices
                                    System.currentTimeMillis(),
                                    Long.valueOf(RANDOM.nextInt(70) + 1 + "")), // units
                                INSTRUMENT))
                        .block();
                  }
                } catch (Throwable ex) {
                  ex.printStackTrace();
                }
              },
              3,
              3,
              TimeUnit.MILLISECONDS);
  
      Thread.currentThread().join();
    }