首页 文章

带有异步servlet的JAX-WS

提问于
浏览
0

所以,我有这个旧的遗留JAX-WS服务,它为每个请求执行大量IO,因此每个请求都需要相当多的时间,但不会消耗太多的CPU / RAM .

随着客户数量的增加,线程饥饿的问题很严重 .

起初,我考虑过实现JAX-WS内置的异步支持,但它需要客户端知道它,在我的情况下这是不行的 . 我不可能强迫他们全部更新他们的代码 .

我目前的想法是创建特殊的异步servlet并手动解析SOAP请求并对响应进行编码,但我似乎无法找到一些好的方法来做到这一点 .

在处理JAX-WS请求时,有没有办法利用Servlet 3.1异步支持?

我应该澄清,我不能使用某种队列,或者“只是提前返回”,因为请求处理可能会失败,客户端必须得到失败 .

2 回答

  • 0

    我找到了适合我的解决方案,CXF Continuations API .

    http://cxf.apache.org/docs/continuations.html

    https://github.com/search?l=java&q=ContinuationProvider&type=Code&utf8=%E2%9C%93

    我必须为CXF Servlet启用异步,并将jboss模块依赖项添加到捆绑的CXF .

    虽然整个事情感觉有点像黑客,但它允许我在不改变服务外部API的情况下进行适当的异步处理 . 作为奖励,我甚至可以决定是暂停请求还是正常处理,这在某些情况下会有很大帮助 .

  • 1

    您可以在此处使用工作流,其中您说Web服务器的工作人员接受请求,您处理它并将其放入由线程共享的队列中,该队列将异步处理此事件 .

    这只意味着您在客户端的等待时间较短,并且您异步处理客户端请求 . 通过这种方式,您可以构建可扩展的系统,并且可以增加任何一方(即Web服务器)上的工作线程数,这样您就可以同时接受来自客户端的多个请求,同时多个线程可以同时处理来自客户端的事件 .

相关问题