我想异步运行的REST webservice有问题。这个例子显示了我想做的事。主要的问题是web服务在旧的服务完成之前不会接受新的请求。我使用Wildfly 10作为我的应用服务器及其RESTeasy实现。
WebApplication.java
@ApplicationPath("rest")
public class WebApplication extends Application
{
public WebApplication ()
{
super();
}
}TestService.java
@Path("test")
public class TestService
{
@Inject
private TestBean bean;
@GET
@Produces(MediaType.APPLICATION_JSON)
public void getDateTime(@Suspended final AsyncResponse response)
{
CompletableFuture.supplyAsync(() -> response.resume(bean.getResult()))
.exceptionally((ex) -> (response.resume(ex)));
}
}TestBean.java
@Stateless
public class TestBean
{
public TestTO getResult()
{
Logger.getLogger(Thread.currentThread().getName()).log(Level.INFO, "Entering REST service");
for (long l = 0; l < Long.MAX_VALUE; l++)
{
// just for simulating a veeeery heavy operation
}
return new TestTO();
}
}TestTO只是一个简单的POJO,所以没有什么特别之处。我想不出有什么不对劲。我在谷歌搜索了一下不同的方法,但都没有用。我也尝试过,只是为了测试:
我在response.resume()调用之后放置了循环,并且接受了一个新请求,而不保留上一个请求(使用简单的日志语句进行调试)。
所以..。什么是阻止第二个请求?我真的不明白,还是我错过了一些可笑的东西?
提前感谢!
发布于 2017-01-26 13:17:14
好吧,我想出来了。
我没有编写同时执行请求的客户端应用程序,而是使用Firefox快速查看输出。我打开了两个选项卡,并调用了for服务的URL。后来我对Microsoft也做了同样的事情.起作用了!从现在开始到100%。
我不知道为什么。也许是因为Edge为每个选项卡生成了一个完整的新进程,而Firefoy不是吗?没关系,下次我使用SoupUI测试webservices时。
我为这个愚蠢的问题感到抱歉。如果我做得对,我就看到了这个问题。
https://stackoverflow.com/questions/41869882
复制相似问题