code: public TFuture<JsonResponse<AdvertiseResponse>> advertise() {
  
          final AdvertiseRequest advertiseRequest = new AdvertiseRequest();
          advertiseRequest.addService(service, 0);
  
          // TODO: options for hard fail, retries etc.
          final JsonRequest<AdvertiseRequest> request = new JsonRequest.Builder<AdvertiseRequest>(
              HYPERBAHN_SERVICE_NAME,
              HYPERBAHN_ADVERTISE_ENDPOINT
          )
              .setBody(advertiseRequest)
              .setTimeout(REQUEST_TIMEOUT)
              .setRetryLimit(4)
              .build();
  
          final TFuture<JsonResponse<AdvertiseResponse>> future = hyperbahnChannel.send(request);
          future.addCallback(new TFutureCallback<JsonResponse<AdvertiseResponse>>() {
              @Override
              public void onResponse(JsonResponse<AdvertiseResponse> response) {
                  if (response.isError()) {
                      logger.error("Failed to advertise to Hyperbahn: {} - {}",
                          response.getError().getErrorType(),
                          response.getError().getMessage());
                  }
  
                  if (destroyed.get()) {
                      return;
                  }
  
                  scheduleAdvertise();
              }
          });
  
          return future;
      }
docs: Starts advertising on Hyperbahn at a fixed interval.
  
  @return a future that resolves to the response of the first advertise request