Как зарегистрировать метрики пула потоков для Spring WebClient? - PullRequest
1 голос
/ 12 марта 2019

Есть ли способ получить метрики пула потоков для регистрации (экспорта) его на графитовой панели для Spring WebClient.

Есть способ сделать аналогичную вещь для шаблона отдыха, настроив PoolingHttpClientConnectionManager.

 public Map<String, Metric> getMetrics() {
    final Map<String, Metric> gauges = new HashMap<>();

    for (Entry<String, PoolingHttpClientConnectionManager> entry : connectionManagerMap
        .entrySet()) {
      gauges.put(entry.getKey() + ".leasedConnections",
          (Gauge<Integer>) () -> entry.getValue().getTotalStats().getLeased());
      gauges.put(entry.getKey() + ".maxConnections",
          (Gauge<Integer>) () -> entry.getValue().getTotalStats().getMax());
      gauges.put(entry.getKey() + ".pendingConnections",
          (Gauge<Integer>) () -> entry.getValue().getTotalStats().getPending());
      gauges.put(entry.getKey() + ".availableConnections",
          (Gauge<Integer>) () -> entry.getValue().getTotalStats().getAvailable());
    }

    return gauges;
  }

В случае с WebClient я не уверен, как получить HttpThreadPool, я создал объект WebClient следующим образом.

WebClient webClient = WebClient.builder()
            .baseUrl(downstream.getServiceLocation())
            .clientConnector(clientHttpConnector)
            .exchangeStrategies(exchangeStrategies)
            .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_XML_VALUE)
            .defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_XML_VALUE)
            .build();

**and clientHttpConnector was created:**

public ClientHttpConnector lbosClientHttpConnector() {
        return new ReactorClientHttpConnector(options -> {
            options.option(ChannelOption.SO_TIMEOUT, applicationConfiguration.getDownstreams().getHttpClient().getSocketTimeout());
            options.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, applicationConfiguration.getDownstreams().getHttpClient().getKeepAliveTimeoutInMs());
            options.poolResources(PoolResources.fixed("HTTP_CONNECTION_POOL", applicationConfiguration.getDownstreams().getHttpClient().getMaxConnections()));
        });
    }

Пожалуйста, предоставьте решение или направьте меня к нему.

...