管道化Web服务响应

时间:2013-07-01 13:47:07

标签: java web-services

我正在设计一个包含非常大的数据源的Web服务,我非常感谢任何关于我的设计是否合适或者我错过了更好的建议的建议。

所以这是问题所在: 我们有几个数据源都提供相同的接口,“最重要”的方法是RowIterator select(Table table, String where)。现在,从功能上来说,我们所有实现的一切都很顺利,但问题是我们需要在接收查询时包含其中一个源的Web服务(在一个天真的实现中)

  1. 等待包装的数据源返回整个结果集
  2. 在将结果集发送到客户端之前整理结果集
  3. 在客户端解组整个结果集,然后将其返回给调用者
  4. 只有在此序列之后,调用者才能看到第一行。这是一个非常令人失望的行为,因为调用者必须不必要地等待整个结果集两次。我希望有一些流水线操作。当服务仍在发送行时,调用者必须能够看到第一个结果。现在我计划通过实现封装在客户端行迭代器中的某种分页来克服这个问题。该服务将维护在接收查询时创建的会话ID(具有超时),并且可用于获取数据块。在将实际查询发送到包装数据源之前,可能已经返回了会话ID。然后,客户端将获取块(页面),直到块空或小于预期(=请求的)块大小。

    因此,在此设计中,调用者将能够在服务仍在发送行时看到第一个结果。但是,我想知道是否有一种方法可以使用SOAP Web服务以每行为基础高效管道结果?

    此外,是否可以将结果返回给调用者而不会反复要求更多结果?

1 个答案:

答案 0 :(得分:0)

最后,我使用MTOM以二进制方式传输数据,并在客户端和服务器上使用阻塞队列来实现所需的并行性。我在这里草拟了这个:Streaming large SOAP attachments