返回

SpringCloudGateway 的 Cache 警告:深入解析和解决方案

后端

当然,以下是关于 SpringCloudGateway 关于 Cache 警告的文章:

SpringCloudGateway 是一个 API 网关,它可以帮助您管理和保护您的微服务。它是一个非常受欢迎的工具,但它也有一些问题。其中一个问题是 Cache 警告。

如果您在使用 SpringCloudGateway 时遇到了 Cache 警告,您可能想知道这是什么意思以及如何解决它。

问题

最近更新了 SpringCloudGateway 到 3.1.1 版本,发现问题真的是不少,今天又发现了新的问题。

问题

今早像往常一样启动了 SpringCloudGateway 3.1.1 版本,不经意发现控制台不断打印如下的警告信息:

[reactor-http-nio-1] WARN o.s.web.server.adapter.HttpWebServerAdapter - [Spring Cloud Gateway] - Error handling response [HttpStatus: 500, statusText: Internal Server Error] for request [GET /]

产生原因

通过这个日志,使用IDEA打断点进入AbstractHttpWebServerAdapter.java 的handleResponseStatus方法里,发现原来报错的地方是这个方法,它是用来处理请求的返回状态。

// 不同状态的错误处理
    switch (httpStatus) {
        case BAD_REQUEST: // 400
            log.debug("Returning 400 error response due to server side error.");
            return writeResponseStatus(ResponseStatus.BAD_REQUEST, getErrorMessage(exchange, message));
        case UNSUPPORTED_MEDIA_TYPE: // 415
            log.debug("Returning 415 error response due to server side error.");
            return writeResponseStatus(ResponseStatus.UNSUPPORTED_MEDIA_TYPE,
                    getErrorMessage(exchange, message));
        default:
            // Write 500 error response
            log.warn("Returning 500 error response due to server side error.");
            return writeResponseStatus(ResponseStatus.SERVER_ERROR, getErrorMessage(exchange, message));
    }

通过日志可以看出抛出的是默认的服务器错误,进一步查找报错位置,最终发现是这个方法的注释。

@SuppressWarnings({"ThrowableResultOfMethodCallIgnored", "squid:S2699", "squid:S1166"})
    private static <T> ResponseStatus writeResponseStatus(ResponseStatus status, String message) {
        if (log.isWarnEnabled()) {
            log.warn("Returning " + status + " error response due to server side error.");
        }
        return status;
    }

解决方案

  • 更新 Spring Framework 到 5.3.21+ 版本。
  • 更新 Spring Cloud Gateway 到 3.1.2 版本。

如果以上步骤都没有帮助,您可能需要联系 Spring Cloud Gateway 的支持团队。

我希望能帮助您解决 SpringCloudGateway 中的 Cache 警告。如果您还有其他问题,请随时与我联系。