2011-07-08 115 views
0

我正在设计一个应用程序并尝试做一些研究,以了解它应该如何工作以及我可以使用的任何提示等。关于Web服务消耗另一个Web服务的建议

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

客户端程序会消耗我的web服务。

我的Webservice需要根据来自客户端的信息轮流执行多次搜索。这些搜索正在使用第三方网络服务。第三方提供Java存根类。

可以/我应该写我的Web服务是多线程的,因此每个线程都被创建并用于搜索和结果整理并返回给客户端?

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

所有的建议是感激地接受,

回答

0

我有点不确定你的需求究竟是什么。搜索是否可以并行运行?如果是这种情况,使用多线程来执行它们可能不是一个好主意。

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

没有问题,我们运行在Tomcat 6上,它工作正常。显然,多线程通常会引起注意,我们使用Java 6 java.util.concurrent库,这非常有用。

0

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

有迹象表明发生了我几个问题:

  1. 线程在Java EE容器直接产卵一般不recomended - 的Java EE容器,如要在该控件 - 所以有专门支持的API用于在Java EE世界中实现此功能(有关此主题的更多信息,请参阅this answer)。我不知道Tomcat现在是否支持这些API,如果不支持,那么like this可能有效。
  2. 你需要一个好的策略来处理破碎和缓慢的反应。假设你有8个答案中有7个,第8个似乎需要很长时间才能给出一个快速的部分答案。最好先考虑一下。
  3. 哪种方式导致采用某种“通知”方式会更好,发送请求,稍后回来收集临时结果,稍后再回来收集更完整的结果。
  4. 某些后端系统可能会对来自同一来源的过多请求做出严重反应。您可能需要限制请求频率既“交际”又避免任何黑名单策略。