0

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

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

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

问题在于client向 发送请求时同步WebService1WS1将对象放入查询中, WS2一直在观察查询并检查是否有新内容,如果是,则向其发送Server处理请求并给出正确响应的请求回来Client

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

谁能给我一个提示我应该使用什么?

4

1 回答 1

0

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

  1. 客户端通过WS1(同步通信)向服务器1发送请求
  2. 服务器 1 中的进程写入队列。
  3. 服务器 1 中的进程等待来自队列的答案。在这一点上,恐怕,由于与客户端的通信是同步的,客户端应该等待。如何?Thread.sleep是一个解决方案。

客户应该等多久?这取决于:

  • 服务器 2 中的频率进程读取队列
  • 通过 WS2 调用服务器 1 所需的时间
  • 服务器处理请求所花费的时间。
  • 服务器 1 中的频率进程读取队列以从服务器 2 中寻找答案

因此,您可以使用循环:

  1. 向队列询问答案
  2. 如果有答案,很好,您回复客户。如果不是,线程必须等待。循环再次开始。

但是,您不能让客户端等待太多,您可以执行以下操作:

  1. 那等待的时间超过了最大时间?如果是,请打破循环并回答客户有问题。
  2. 向队列询问答案
  3. 如果有答案,很好,您回复客户。如果不是,线程必须等待。循环再次开始。

我认为您应该重新考虑停止代码执行,因为在您从队列中获得答案之前没有要执行的代码。无论如何,请参阅此问题以线程睡眠替代方案。

于 2012-11-23T12:36:35.947 回答