Tomcat起了一个测试桩,调用该测试桩无响应
有时在测试新业务流程时因为涉及多个不同接口的调用,而这些被调用的服务端因为网络权限或开发进度问题暂时对我们不可达,那么我们可以通过模拟接口返回来完成我们新业务的测试。这次碰到的问题是我明明起了该测试桩,业务流程发过去的请求发过去却一直没有响应而超时了,而且没有任何测试桩接口的日志,抓包也只看到调用的入口消息,真的是两眼一抹黑。折腾到最后发现是Tomcat配置问题:我在server.xml中新增加一个web服务用于测试桩:
<Host name="localhost" appBase="webapps" unpackWARs="false" autoDeploy="false" xmlValidation="false" xmlNamespaceAware="false" deployOnStartup="false"> <Context path="/wlfServer" reloadable="false" docBase="../webapps/wlfServer" workdir="../work"/> </Host>
但是最大线程数却发现原来只配置为1:
<Connoctor port="8080" maxHttpHeadSize="8192" maxThreads="1" minSpareThreads="100" maxSpareThreads="125" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" />
这就导致Tomcat容器只能拉起一个线程起动本身我要跑的业务主流程,而我在该业务主流程里调用的测试桩流程却无法拉起来,只能等我的业务主流程得到调用测试桩超时这个结果后主流程结束,测试桩流程才能被拉起。所以从日志里看就很诡异了,主流程里测试桩流程全部超时,测试桩流程全部正常。修改maxThreads值大于1即可解决问题。
官网的解释:
翻译一下:
此连接器将创建的请求处理线程的最大数量,因此,它确定可以处理的同时请求的最大数量。 如果未指定,则此属性设置为200。如果执行程序与此连接器相关联,则此属性将被忽略,因为连接器将使用执行程序而不是内部线程池执行任务。 请注意,如果配置了执行程序,则将正确记录为此属性设置的任何值,但会将其报告为(例如,通过JMX)-1,以表明未使用该值。