0

我在 Java 中开发了一个 WebService (WS1),它部署在 Tomcat 服务器中。如果满足某些条件,WS1 需要调用另一个 WebService (WS2) 来并行运行。这可能吗?还是 WS1 必须等待 WS2 的响应才能继续运行。这样做的目的不是延迟 WS1 的响应,因为它不依赖于 WS2。但是,WS2 触发器依赖于 WS1,这就是我的问题开始的方式。

我对这个问题的假设解决方案是创建一个单独的 servlet,它调用 WS2 而不延迟 WS1。我该如何实施它,或者任何人都可以想到更好的解决方案?

4

3 回答 3

3

这取决于您想要达到的目标。如果您只想启动第二个 WS,您可以创建一个新的本地线程并进行调用。第二个 WS 甚至可能支持异步调用,这样你在调用它之后就不会被阻塞。创建一个新线程的工作方式如下。

首先,您需要一个用于该线程的类。此类将负责与 WS2 的通信:

class ThreadForWS2 extends Thread {
  public void run() {
    // invoke WS2 here
  }
}

在您的 WS1 请求处理程序中,您只需要启动此线程,例如:

Thread threadForWS2 = new ThreadForWS2();
threadForWS2.start();

就是这样,当然在 Java 中有很多方法可以创建另一个线程。这取决于您调查最佳解决方案。

于 2012-06-20T17:34:33.757 回答
0

当然可以。
我想知道您是在谈论 SOAP 还是 RESTFul Web 服务
一般来说,在这两种技术中,您都可以在 WS1 中调用一个方法,从而与 WS2 进行通信(即 - 将带有 REST 数据的 HTTP 请求发送到资源 URL 或发送 SOAP 信封)
如果您的意思是并行运行以打开一个线程并执行 WS2 中方法的调用代码 - 这也是可能的
此外,据我所知,servlet API 3.0 支持异步调用,也许这也可以帮助你

于 2012-06-20T17:33:32.463 回答
0

您必须以异步方式调用 WS2 。这意味着 Web 服务调用在单独的线程中处理,不会影响父线程 (WS1) 的执行。

与异步调用相反的是同步调用,它阻塞当前线程,直到收到响应。

于 2012-06-20T17:37:06.557 回答