聊聊spring boot的WebFluxTagsProvider的使用

来源:脚本之家  责任编辑:小易  


本文主要研究一下webflux的WebFluxTagsProvider

WebFluxTagsProvider

spring-boot-actuator-2.1.5.RELEASE-sources.jar!/org/springframework/boot/actuate/metrics/web/reactive/server/WebFluxTagsProvider.java

@FunctionalInterface
public interface WebFluxTagsProvider {

  /**
   * Provides tags to be associated with metrics for the given {@code exchange}.
   * @param exchange the exchange
   * @param ex the current exception (may be {@code null})
   * @return tags to associate with metrics for the request and response exchange
   */
  Iterable<Tag> httpRequestTags(ServerWebExchange exchange, Throwable ex);

}

WebFluxTagsProvider接口定义了httpRequestTags方法

DefaultWebFluxTagsProvider

spring-boot-actuator-2.1.5.RELEASE-sources.jar!/org/springframework/boot/actuate/metrics/web/reactive/server/DefaultWebFluxTagsProvider.java

public class DefaultWebFluxTagsProvider implements WebFluxTagsProvider {

  @Override
  public Iterable<Tag> httpRequestTags(ServerWebExchange exchange,
      Throwable exception) {
    return Arrays.asList(WebFluxTags.method(exchange), WebFluxTags.uri(exchange),
        WebFluxTags.exception(exception), WebFluxTags.status(exchange),
        WebFluxTags.outcome(exchange));
  }

}

DefaultWebFluxTagsProvider实现了WebFluxTagsProvider接口,它返回了method、uri、exception、status、outcome这几个tag

WebFluxTags

spring-boot-actuator-2.1.5.RELEASE-sources.jar!/org/springframework/boot/actuate/metrics/web/reactive/server/WebFluxTags.java

public final class WebFluxTags {

  private static final Tag URI_NOT_FOUND = Tag.of("uri", "NOT_FOUND");

  private static final Tag URI_REDIRECTION = Tag.of("uri", "REDIRECTION");

  private static final Tag URI_ROOT = Tag.of("uri", "root");

  private static final Tag URI_UNKNOWN = Tag.of("uri", "UNKNOWN");

  private static final Tag EXCEPTION_NONE = Tag.of("exception", "None");

  private static final Tag OUTCOME_UNKNOWN = Tag.of("outcome", "UNKNOWN");

  private static final Tag OUTCOME_INFORMATIONAL = Tag.of("outcome", "INFORMATIONAL");

  private static final Tag OUTCOME_SUCCESS = Tag.of("outcome", "SUCCESS");

  private static final Tag OUTCOME_REDIRECTION = Tag.of("outcome", "REDIRECTION");

  private static final Tag OUTCOME_CLIENT_ERROR = Tag.of("outcome", "CLIENT_ERROR");

  private static final Tag OUTCOME_SERVER_ERROR = Tag.of("outcome", "SERVER_ERROR");

  private WebFluxTags() {
  }

  public static Tag method(ServerWebExchange exchange) {
    return Tag.of("method", exchange.getRequest().getMethodValue());
  }

  public static Tag status(ServerWebExchange exchange) {
    HttpStatus status = exchange.getResponse().getStatusCode();
    if (status == null) {
      status = HttpStatus.OK;
    }
    return Tag.of("status", String.valueOf(status.value()));
  }

  public static Tag uri(ServerWebExchange exchange) {
    PathPattern pathPattern = exchange
        .getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
    if (pathPattern != null) {
      return Tag.of("uri", pathPattern.getPatternString());
    }
    HttpStatus status = exchange.getResponse().getStatusCode();
    if (status != null) {
      if (status.is3xxRedirection()) {
        return URI_REDIRECTION;
      }
      if (status == HttpStatus.NOT_FOUND) {
        return URI_NOT_FOUND;
      }
    }
    String path = getPathInfo(exchange);
    if (path.isEmpty()) {
      return URI_ROOT;
    }
    return URI_UNKNOWN;
  }

  private static String getPathInfo(ServerWebExchange exchange) {
    String path = exchange.getRequest().getPath().value();
    String uri = StringUtils.hasText(path) ? path : "/";
    return uri.replaceAll("//+", "/").replaceAll("/$", "");
  }

  public static Tag exception(Throwable exception) {
    if (exception != null) {
      String simpleName = exception.getClass().getSimpleName();
      return Tag.of("exception", StringUtils.hasText(simpleName) ? simpleName
          : exception.getClass().getName());
    }
    return EXCEPTION_NONE;
  }

  public static Tag outcome(ServerWebExchange exchange) {
    HttpStatus status = exchange.getResponse().getStatusCode();
    if (status != null) {
      if (status.is1xxInformational()) {
        return OUTCOME_INFORMATIONAL;
      }
      if (status.is2xxSuccessful()) {
        return OUTCOME_SUCCESS;
      }
      if (status.is3xxRedirection()) {
        return OUTCOME_REDIRECTION;
      }
      if (status.is4xxClientError()) {
        return OUTCOME_CLIENT_ERROR;
      }
      return OUTCOME_SERVER_ERROR;
    }
    return OUTCOME_UNKNOWN;
  }

}

WebFluxTags定义了URI_NOT_FOUND、URI_REDIRECTION、URI_ROOT、URI_UNKNOWN、EXCEPTION_NONE、OUTCOME_UNKNOWN、OUTCOME_INFORMATIONAL、OUTCOME_SUCCESS、OUTCOME_REDIRECTION、OUTCOME_CLIENT_ERROR、OUTCOME_SERVER_ERROR这些Tag常量

小结

WebFluxTagsProvider接口定义了httpRequestTags方法;DefaultWebFluxTagsProvider实现了WebFluxTagsProvider接口,它返回了method、uri、exception、status、outcome这几个tag;WebFluxTags定义了URI_NOT_FOUND、URI_REDIRECTION、URI_ROOT、URI_UNKNOWN、EXCEPTION_NONE、OUTCOME_UNKNOWN、OUTCOME_INFORMATIONAL、OUTCOME_SUCCESS、OUTCOME_REDIRECTION、OUTCOME_CLIENT_ERROR、OUTCOME_SERVER_ERROR这些Tag常量

doc

WebFluxTagsProvider

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。


  • 本文相关:
  • java list循环与map循环的总结
  • java环境中的jdk、jvm、jre详细介绍
  • java实现fibonacci算法实例
  • 解决springmvc 返回java8 时间json数据的格式化问题处理
  • 使用java实现类似comet风格的web app
  • java编码辅助工具lombok用法详解
  • 阿里sentinel支持spring cloud gateway的实现
  • java高并发锁的3种实现示例代码
  • springboot集成websocket【基于纯h5】进行点对点[一对一]和广播[
  • springmvc发送邮件的简单实现
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved