如何使用 Tomcat 在本地产生 503 错误?

Posted

技术标签:

【中文标题】如何使用 Tomcat 在本地产生 503 错误?【英文标题】:How can I produce a 503 error locally with Tomcat? 【发布时间】:2018-04-19 18:29:28 【问题描述】:

我正在开发一个使用 Tomcat 8.5.9 版本的 Spring Boot 开发的项目。

应用程序在 JAX RS 中提供 RESTfull Web 服务。 在 Prod 环境中,有时会收到错误503 Service not available,但由于我使用本地 Mock 无法重现。

有没有办法在本地重现错误?就像让 TomCat 暂时不可用?

【问题讨论】:

您的 Spring Boot 应用程序在尝试命中端点时是否给出 503? 在本地环境中,没有 【参考方案1】:

根据MDN,HTTP 503 Service Unavailable server 错误表示:

...响应码表示 服务器尚未准备好处理请求。

常见的原因有:

因维护而停机或过载的服务器。

要以自然的方式重现此错误响应,您可以重载 Tomcat。

为此,请更改 Tomcat 可以处理的最大并发请求数。

如果您使用嵌入式 tomcat,请将 server.tomcat.max-threads Spring Boot 属性设置为易于访问的弱值,例如:

server.tomcat.max-threads = 1

否则,如果您使用我们自己的Tomcat安装,请在server.xml配置文件的Connector元素中将maxThreads设置为弱值:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
           ...
           maxThreads="1"/>

【讨论】:

【参考方案2】:

您可以使用 Java 通过 WireMock 模拟它。

public static WireMockServer wireMockServer = new WireMockServer(8089);
wireMockServer.start();
    final WireMock wireMock = new WireMock(8089);
    wireMock.register(WireMock.get(WireMock.urlEqualTo("/conf"))
            .willReturn(WireMock.aResponse()
                    .withStatus(503)));

点击 localhost:8089/conf 得到 503 Service Unavailable

【讨论】:

以上是关于如何使用 Tomcat 在本地产生 503 错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥Tomcat版本9.0.44返回错误503

tomcat 的503错误 (接上篇)

tomcat 的503错误 (接上篇)

apache tomcat 503 自定义错误页面

Azure 容器生成错误“503”原因“站点不可用”

503 服务不可用错误 Apache Tomcat