@Override
  public CompletableFuture<Response> execute(
      Request request, Options options, Optional<Object> requestContext) {
    final Timer.Sample sample = Timer.start(meterRegistry);
    return client
        .execute(request, options, requestContext)
        .whenComplete(
            (response, th) -> {
              Timer timer;
              if (th == null) {
                countResponseCode(request, response, options, response.status(), null);
                timer = createTimer(request, response, options, null);
              } else if (th instanceof FeignException) {
                FeignException e = (FeignException) th;
                timer = createTimer(request, response, options, e);
                countResponseCode(request, response, options, e.status(), e);
              } else if (th instanceof Exception) {
                Exception e = (Exception) th;
                timer = createTimer(request, response, options, e);
              } else {
                timer = createTimer(request, response, options, null);
              }
              sample.stop(timer);
            });
  }
Wrap feign {@link Client} with metrics.
micrometer/src/main/java/feign/micrometer/MeteredAsyncClient.java