围绕Web服务使用其他Web服务的建议

时间:2011-07-08 13:12:12

标签: java multithreading tomcat service

我正在设计一个应用程序并试图对它应该如何工作以及我可以使用的任何提示等进行一些研究。

我需要开发一个在Tomcat 6上运行的中间件Web服务。

客户端程序使用我的网络服务。

我的Web服务轮流需要根据客户端的信息运行大量搜索10。这些搜索使用的是第三方Web服务。第三方提供Java Stub Classes。

可以/我应该将我的Web服务编写为多线程,以便创建每个线程并将其用于搜索并将结果整理并返回给客户端吗?

搜索可能需要一段时间才能完成大约200-500毫秒

感谢所有建议,

2 个答案:

答案 0 :(得分:0)

我对你的需求究竟有些不确定。搜索能够并行运行吗?如果是这种情况,使用多线程来执行它们可能并不是一个坏主意。

我正在处理的应用程序中有类似的东西 - 长时间运行的搜索在一个单独的线程中运行,以便其他处理可以继续,然后在完成后将结果发送回客户端。

这没有问题,我们在Tomcat 6上运行,它运行正常。显然,多线程的常见注意事项适用,我们正在使用Java 6 java.util.concurrent库,这非常有用。

答案 1 :(得分:0)

这里似乎有几个并行运行的后端查询的潜在好处,所以某种多线程似乎是个好主意。

我遇到了一些问题:

  1. 通常不建议在Java EE容器中直接生成线程 - Java EE容器就像控制它一样 - 因此在Java EE世界中有专门支持的API(参见this answer关于这个主题的更多信息。)我不知道Tomcat现在是否支持这样的API,如果没有,那么like this可能会有用。
  2. 你需要一个好的策略来处理破碎和缓慢的反应。假设您有8个响应中的7个,而第8个似乎需要很长时间才能更快地给出快速的部分响应。最好先考虑这个问题。
  3. 导致最好是采用某种“noticebaord”方式,发送请求,稍后再回来收集中期结果,稍后再回来收集更完整的结果。
  4. 某些后端系统可能会对来自同一来源的过多请求做出严重反应。您可能需要限制请求频率,使其既“社交”又避免任何黑名单策略。