首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步REST REST服务

异步REST REST服务
EN

Stack Overflow用户
提问于 2017-01-26 09:01:16
回答 1查看 97关注 0票数 0

我想异步运行的REST webservice有问题。这个例子显示了我想做的事。主要的问题是web服务在旧的服务完成之前不会接受新的请求。我使用Wildfly 10作为我的应用服务器及其RESTeasy实现。

WebApplication.java

代码语言:javascript
复制
@ApplicationPath("rest")
public class WebApplication extends Application
{
    public WebApplication ()
    {
        super();
    }
}

TestService.java

代码语言:javascript
复制
@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

代码语言:javascript
复制
@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()调用之后放置了循环,并且接受了一个新请求,而不保留上一个请求(使用简单的日志语句进行调试)。

所以..。什么是阻止第二个请求?我真的不明白,还是我错过了一些可笑的东西?

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2017-01-26 13:17:14

好吧,我想出来了。

我没有编写同时执行请求的客户端应用程序,而是使用Firefox快速查看输出。我打开了两个选项卡,并调用了for服务的URL。后来我对Microsoft也做了同样的事情.起作用了!从现在开始到100%。

我不知道为什么。也许是因为Edge为每个选项卡生成了一个完整的新进程,而Firefoy不是吗?没关系,下次我使用SoupUI测试webservices时。

我为这个愚蠢的问题感到抱歉。如果我做得对,我就看到了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41869882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档