聊聊spring boot的WebFluxTagsProvider的使用

 更新时间:2019年07月11日 14:54:13   作者:codecraft  
这篇文章主要介绍了聊聊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 GUI实现学生图书管理简单实例

    java GUI实现学生图书管理简单实例

    这篇文章主要为大家详细介绍了java GUI实现学生图书管理简单示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Maven依赖作用域和依赖传递的使用

    Maven依赖作用域和依赖传递的使用

    本文主要介绍了Maven依赖作用域和依赖传递的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Spring Boot之过滤器 Filter注入的方式解析

    Spring Boot之过滤器 Filter注入的方式解析

    这篇文章主要介绍了Spring Boot之过滤器 Filter注入的方式解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java @SentinelResource全面介绍

    Java @SentinelResource全面介绍

    在实际应用过程中,我们可能需要限流的层面不仅限于接口。可能对于某个方法的调用限流,对于某个外部资源的调用限流等都希望做到控制。对此,我们需要学习使用@SentinelResource注解,灵活的定义控制资源以及如何配置控制策略
    2022-08-08
  • Java中HashMap和Hashtable及HashSet的区别

    Java中HashMap和Hashtable及HashSet的区别

    以下是对Java中HashMap和Hashtable及HashSet的区别进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-09-09
  • 关于自定义过滤器获取不到session问题

    关于自定义过滤器获取不到session问题

    这篇文章主要介绍了关于自定义过滤器获取不到session问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Java中的位运算符号解读(&、|、^、~、<<、>>、>>>)

    Java中的位运算符号解读(&、|、^、~、<<、>>、>>>)

    这篇文章主要介绍了Java中的位运算符号(&、|、^、~、<<、>>、>>>),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 如何使用@Value和@PropertySource注入外部资源

    如何使用@Value和@PropertySource注入外部资源

    这篇文章主要介绍了如何使用@Value和@PropertySource注入外部资源的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Java利用递归算法实现查询斐波那契数

    Java利用递归算法实现查询斐波那契数

    今天小编就为大家分享一篇关于Java利用递归算法实现查询斐波那契数,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Java利用读写的方式实现音频播放代码实例

    Java利用读写的方式实现音频播放代码实例

    这篇文章主要介绍了Java利用读写的方式实现音频播放代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11

最新评论