首页 > 编程 > Java > 正文

聊聊spring boot的WebFluxTagsProvider的使用

2019-11-26 08:49:42
字体:
来源:转载
供稿:网友


本文主要研究一下webflux的WebFluxTagsProvider

WebFluxTagsProvider

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

@FunctionalInterfacepublic 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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表