Spring Web Service - Web服务通信

时间:2012-11-23 08:07:21

标签: java web-services synchronization

今天我有一些理论问题(我找不到编写示例代码的方法)。

我的系统架构如下所示:Client <--> Web Service1 <--> query <--> Web Service2 <--> Server

我无法改变它,因为我的公司需要将它分开。

问题在于clientWebService1发送请求时的同步,WS1将对象置于查询中,WS2一直在查看查询并检查是否存在是一种新的东西,如果是它向Server发送请求来处理请求并给出一个必须回到Client的正确响应。

Server对所有请求没有相同的处理时间。我必须得到客户的请求并在一个会话中发送请求。 Thread.sleep或任何停止执行代码的方法都是不可接受的。

任何人都可以给我一个暗示我应该使用什么?

1 个答案:

答案 0 :(得分:0)

好的,让我们忘记队列和服务器之间的通信。

  1. 客户端通过WS1(同步com。)
  2. 向服务器1发送请求
  3. 服务器1中的进程写入队列。
  4. 服务器1中的进程等待队列中的答案。此时,我担心,由于与客户端的通信是同步的,客户端应该等待。怎么样? Thread.sleep是一个解决方案。
  5. 客户应该等多少钱?这取决于:

    • 服务器2中的频率处理读取队列
    • 通过WS2到服务器1呼叫服务器的时间
    • 服务器处理请求的时间。
    • 服务器1中的频率处理读取队列以查找来自服务器2的答案

    所以,你可以使用一个循环:

    1. 向队列询问答案
    2. 如果有答案,很好,你回应客户。如果没有,线程必须等待。循环再次开始。
    3. 但是,你不能让客户等待太多,你可以这样做:

      1. 等待的时间超过最长时间?如果是,请打破循环并回答客户端出现问题。
      2. 向队列询问答案
      3. 如果有答案,很好,你回应客户。如果没有,线程必须等待。循环再次开始。
      4. 我认为你应该重新考虑停止代码执行,因为在你从队列中回答之前没有代码可以执行。无论如何,请参阅此question来解决睡眠替代方案。