异步Web服务
问题描述:
我正试图找到解决以下问题的方法: 我们目前有一个与jax-ws一起工作的同步Web服务。异步Web服务
我需要做的是找到某种方式,这样客户端请求将保持同步,即发送请求并阻止客户端,直到获取响应,但服务器端将异步化。
我还需要一个尽可能少资源的解决方案,因为系统会收到很多请求,并且在最坏的情况下(几秒钟)每个请求可能需要一些时间。
我知道servlet 3.0正在回答所有这些要求,但我知道它不能用于Web服务,这是真的吗?
我也看到有一种叫做web服务的jms,我可以在其中定义一个队列来接收客户请求,另一个队列可以让客户端得到响应,但我没有看到任何示例如果客户端的确在以同步的方式工作,它是如何工作的。
你有什么想法吗?
在先进的感谢, 奥廖尔
答
你可以设计你的web服务退票/手柄/令牌:
Handle submitRequest(Request request)
所以这个功能只是接受您的请求,并立即返回。
稍后在客户端上您可以查询结果,所以您需要另一个功能。
Result poll(Handle handle)
并且如果请求处理已经完成,结果是非空的。
在客户端上,您可以在对轮询功能的调用之间休眠(或更新进度条)。
这两个函数在服务器端需要的资源很少。不需要打开HTTP连接。它们只是作为可以基于JMS的异步处理引擎的前端。
另一方面,您必须根据您的业务需求分别调整轮询频率或睡眠持续时间(例如:100ms,250ms,500ms,1s,2s,3s)。
更新:
如果您不能更改客户端,服务器可以轮询代表对异步结果服务端的客户端。但这种方式保持连接,所以你应该注意超时。
https://weblogs.java.net/blog/ramapulavarthi/archive/2010/08/18/new-asynchronous-servlet-transport-jax-ws-ri –
感谢您的评论,无庸置疑,我只是找到了我们的我不能使用servlet 3.0,因为我们使用的是weblogic 10.3.6 ......还有其他解决方案吗? – Orel