我正在调用Spring Web服务,大约需要5秒钟才能返回响应。 webservice调用在部署到websphere之前在Tomcat容器中进行。 我被另一个开发人员告知,对这个服务的调用应该在一个单独的java线程中处理,因为它是“将JVM卡在一行代码上太长时间的不良做法”,在这种情况下它被卡在了调用Web服务的代码。我不同意并认为,如果Web服务需要5或10秒才能完成,那么这很好,将收到响应并且代码执行将继续正常进行。我是对的吗?
答案 0 :(得分:2)
我会说两点:
如果后续计算取决于该Web服务的结果,那么您无论如何都没有选择,并且产生新线程只是浪费资源;
如果此调用完全独立,则可能有充分的理由将其卸载到单独的线程。即使五秒钟本身并不多,这可能不是(现在或代码库的未来)系统毫无意义地等待独立任务完成的唯一点。 通常是让独立任务独立运行的好习惯。
但是,如果您的呼叫是在部署到Tomcat容器中的应用程序中发生的(此问题在您的问题中并不完全清楚),那么通常是Web应用程序生成的错误做法它自己的子线程。如果存在任务,则应将任务提交给容器提供的执行程序服务。
答案 1 :(得分:0)
同步调用webservices是个坏主意,它可能适用于集成或测试环境,但响应将随着系统负载的增加而呈指数增长。你应该看看某种异步通信。
在我们的项目中,我们经常进行大量同步通信,所有这些都被重写为异步。