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

How can I produce a 503 error locally with Tomcat?

我正在开发一个使用 Spring 开发的项目,使用 Tomcat 的 8.5.9 版启动。

该应用程序在 JAX RS 中提供 RESTfull Web 服务。 在Prod环境下,有时会报错503 Service not available,但我无法重现,因为我使用的是本地Mock。

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

根据 MDN,HTTP 503 服务不可用服务器错误表示:

... response code indicates that the server is not ready to handle the request.

常见原因是:

a server that is down for maintenance or that is overloaded.

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

要做到这一点,请更改 Tomcat 可以处理的最大同时请求数。

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

server.tomcat.max-threads = 1

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

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

您可以使用 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 服务不可用