【问题标题】:Advice around Web Service consuming another Web Service关于使用另一个 Web 服务的 Web 服务的建议
【发布时间】:2011-07-08 13:12:11
【问题描述】:

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

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

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

我的 Web 服务需要根据来自客户端的信息轮流运行 10 次搜索。这些搜索使用第 3 方网络服务。第 3 方提供 Java 存根类。

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

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

感谢所有建议,

【问题讨论】:

    标签: java multithreading tomcat service


    【解决方案1】:

    我有点不确定您的需求到底是什么。搜索是否能够并行运行?如果是这种情况,使用多线程执行它们可能不是一个坏主意。

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

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

    【讨论】:

      【解决方案2】:

      并行运行多个后端查询似乎确实有潜在的好处,因此某种多线程似乎是个好主意。

      我遇到了几个问题:

      1. 通常不建议在 Java EE 容器中直接生成线程 - Java EE 容器喜欢控制它 - 因此在 Java EE 世界中有专门支持的 API 来执行此操作(有关更多信息,请参阅 this answer关于这个话题。)我不知道这些天 Tomcat 是否支持这样的 API,如果不支持,那么 like this 可能会起作用。
      2. 您需要一个好的策略来处理意志消沉和反应迟缓的问题。假设您有 8 个响应中的 7 个,而第 8 个响应似乎需要很长时间,最好给出快速的部分响应。最好提前考虑一下。
      3. 这会导致最好采用某种“通知栏”方法,发送请求,稍后再回来收集中间结果,稍后再回来收集更完整的结果。
      4. 某些后端系统可能会对来自同一来源的过多请求做出不良反应。您可能需要限制请求频率,既要“社交”,又要避免任何黑名单政策。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 2011-08-25
        • 1970-01-01
        相关资源
        最近更新 更多