异步RESTful Web服务是否可行?

时间:2011-09-28 12:59:29

标签: java web-services rest asynchronous jax-rs

阅读RESTful文档,似乎不可能实现异步实例,但有人可能会更清楚地了解SO。

我的意思是我想异步执行服务请求:

@Path("/helloworld", asyncSupported=true)
public class MyHelloWorldService {
    ...
}

我知道asyncSupported中没有定义@Path,但我正在寻找与@WebServlet类似的内容。然后,我想使用AsyncContext个实例(或任何等效的实例)。

这可能吗?

6 个答案:

答案 0 :(得分:8)

RestEasy对它有一些支持 1 - 使用名为@Suspend的自定义注释。

见这里: http://docs.jboss.org/resteasy/docs/2.2.1.GA/userguide/html/Asynchronous_HTTP_Request_Processing.html

在泽西岛上还有一个名为Atmosphere的框架/库,但是对于你的用例可能有点过分,因为它的焦点似乎是在长轮询的客户端/服务器web应用程序上(例如聊天 - https://github.com/Atmosphere/atmosphere)< / p>

[1]您的请求的CDI范围将在实际执行逻辑的线程中丢失。有关详细信息,请参阅RESTEasy-682问题。这是我目前所知的任何REST框架尚未解决的问题 [2014年3月]

答案 1 :(得分:2)

CXF and Jetty Continuations显然可以实现这一点,但Jetty 6似乎只能实现这一点;他们已经在Jetty 7中更改为Servlet 3.0规范中的内容,我不知道CXF是否支持它。此外,Jetty Continuations似乎有点a messy API, with a lot of manual stuff所以我不知道转换代码有多容易。

但是,似乎有些可能。伴随着微风,当上帝愿意的时候。

答案 2 :(得分:2)

宁静的生活仍处于生命的早期阶段。但这个问题应该被视为2部分。客户端和服务器。

客户端:

对于客户端,去年的最近变化已经足够成熟。最近,基于Jeanfrancois Arcand的非阻塞客户端被实现并推送到存储库。有一个解释here

服务器:

对于服务器端,它仍然不成熟。采用新的servlet规范非常慢,作为开发人员,我期望JSR 339也能解决这些问题。这些句子也清楚地解决了JSR规范。

  

JAX-RS 1.1在服务器上定义了同步请求响应模型   侧。这个JSR将指定一个简单的异步请求处理   模型使得响应可以异步返回到   请求。可以利用Servlet 3.0来实现此类支持   实现可以选择使用其他特定于容器的API   代替。

然而,还有其他选择。像Jetty这样的项目正在解决像example这样优雅的问题。我只能建议你在社区不断发展时考虑其他选择。

答案 3 :(得分:2)

现在,您可以使用JAX-RS 2.0 API进行异步RESTful调用,这是最近发布的Java EE 7.0的一部分

http://www.slideshare.net/reza_rahman/jaxrs2?ref=

答案 4 :(得分:1)

查看Pubsubhubbub发现here以获取基于REST的异步协议的示例。它基于Atom Syndication格式,比WS- * pub / sub机制简单得多。

答案 5 :(得分:0)

您可能还想尝试同时处于异步和反应状态的Spring Webflux。但是,这不是Java EE的JAX-RS实现。

相关问题