异步Web服务

问题描述:

我正试图找到解决以下问题的方法: 我们目前有一个与jax-ws一起工作的同步Web服务。异步Web服务

我需要做的是找到某种方式,这样客户端请求将保持同步,即发送请求并阻止客户端,直到获取响应,但服务器端将异步化。

我还需要一个尽可能少资源的解决方案,因为系统会收到很多请求,并且在最坏的情况下(几秒钟)每个请求可能需要一些时间。

我知道servlet 3.0正在回答所有这些要求,但我知道它不能用于Web服务,这是真的吗?

我也看到有一种叫做web服务的jms,我可以在其中定义一个队列来接收客户请求,另一个队列可以让客户端得到响应,但我没有看到任何示例如果客户端的确在以同步的方式工作,它是如何工作的。

你有什么想法吗?

在先进的感谢, 奥廖尔

+0

https://weblogs.java.net/blog/ramapulavarthi/archive/2010/08/18/new-asynchronous-servlet-transport-jax-ws-ri –

+0

感谢您的评论,无庸置疑,我只是找到了我们的我不能使用servlet 3.0,因为我们使用的是weblogic 10.3.6 ......还有其他解决方案吗? – Orel

你可以设计你的web服务退票/手柄/令牌:

Handle submitRequest(Request request) 

所以这个功能只是接受您的请求,并立即返回。

稍后在客户端上您可以查询结果,所以您需要另一个功能。

Result poll(Handle handle) 

并且如果请求处理已经完成,结果是非空的。

在客户端上,您可以在对轮询功能的调用之间休眠(或更新进度条)。

这两个函数在服务器端需要的资源很少。不需要打开HTTP连接。它们只是作为可以基于JMS的异步处理引擎的前端。

另一方面,您必须根据您的业务需求分别调整轮询频率或睡眠持续时间(例如:100ms,250ms,500ms,1s,2s,3s)。

更新:

如果您不能更改客户端,服务器可以轮询代表对异步结果服务端的客户端。但这种方式保持连接,所以你应该注意超时。

+0

嗨,问题是,我不能改变客户端目前的实施,这是在请求响应的方式工作。我只能改变服务器端 – Orel

+0

我已经添加了对答案的更新。 – Beryllium