我知道,它可以SocketTimeoutException通过使用来模拟withFixedDelay,但是怎么样ConnectionTimeoutException?
是的,可以通过调用addDelayBeforeProcessingRequests(300)Java API或将以下内容发布到WireMock来执行此操作http://<host>:<port>/__admin/socket-delay:
{ "milliseconds": 300 }
(显然用你要延迟的毫秒数替换300)
从2.0.8-beta 版本开始,这个问题的答案似乎是否定的。
Tom(WireMock 的作者)在这个 GitHub 问题中解释了原因:
目前基本上不可能在纯 Java 中可靠地强制连接超时。
过去的情况是,您可以在调用
.accept()套接字之前注入延迟,但一段时间后停止工作,我猜是由于实现内部的变化。我目前的建议是使用在网络堆栈级别工作的工具。
iptables ... -j DROPtype 命令可以解决这个问题,或者如果你想要一个自动化程度,你可以使用诸如https://github.com/tomakehurst/saboteur或https://github.com/alexei-led/pumba 之类的工具。
他还继续解释说,仅仅停止 WireMock 并不能达到同样的目的:
关闭 WireMock 不会有同样的效果——当一个端口没有被监听时,你会得到一个 TCP
RST(重置)数据包,而当你在初始设置后的超时窗口中没有从服务器返回任何东西时,就会发生连接超时SYN包。
| 归档时间: |
|
| 查看次数: |
8322 次 |
| 最近记录: |