2012-11-23 219 views
0

今天我有一种理论问题(我找不到一种方法来编写示例代码)。春季Web服务 - Web服务通信

我的系统架构是这样的:Client <--> Web Service1 <--> query <--> Web Service2 <--> Server

,因为我的公司需要它是独立的,我不能改变它。

问题出在同步时client发送到WebService1请求,WS1把一个对象查询,WS2是看查询所有的时间,检查是否有新的东西,如果是它发送一个请求,Server哪些进程该请求并给出适当的响应,该响应必须回到Client

Server没有过程的所有请求相同的时间。我必须从客户端获得请求并在一个会话内发送请求。 Thread.sleep或任何一种停止执行代码的方法都是不可接受的。

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

+0

我不明白这一切。 WS2的含义是什么? WS2是Web服务还是流程?你的系统架构不符合你对过程的描述。 – jddsantaella

+0

好的,我很抱歉,刚刚编辑了架构。 Querry是intependent的事情,WS2是web服务其实我不能说更多的WS2,因为我不是一个谁负责呢,我只是创造一个WebService1其放置请求上querry并等待响应 – Mithrand1r

+0

因此,客户端发送通过WS1向Server1发送一个请求。 WS1将对象放入查询中并等待(检查是否有新事物)。然后,我们在Server2上运行一个进程,检查新的对象。当有新的对象时,它通过WS2调用服务器。有些任务完成后,WS2重播过程中的一个Server2上把东西放回队列中,那么,在Server1上运行的过程中检测到的变化,做了一些工作,并重播到客户端。它是否正确? – jddsantaella

回答

0

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

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

多少客户端应该等待?这取决于:在服务器2

  • 频率过程读取队列
  • 时间经由WS2采取服务器1呼叫服务器
  • 时间采取服务器处理该请求。
  • 在服务器1频率进程读取队列从服务器2

所以寻找一个答案,你可以使用一个循环:

  1. 要求的队列答案
  2. 如果答案是那里,很好,你回应客户。如果不是,线程必须等待。循环再次开始。

但是,你不能这样做,客户端等待太多,你可以这样做:

  1. 在等待的时间超过最大时间?如果是的话,打破循环,回答客户有什么问题。
  2. 请求队列中的答案
  3. 如果答案有,很好,你回应客户端。如果不是,线程必须等待。循环再次开始。

我认为你应该重新考虑停止代码执行,因为直到你从队列中得到答案,才会执行代码。无论如何,看到这个question线程睡眠的替代品。