【问题标题】:Jersey Rest Asynchronous responseJersey Rest 异步响应
【发布时间】:2015-03-12 21:59:56
【问题描述】:

我正在尝试立即从下面的方法中获取响应并继续执行其余过程。但我看不到我的返回值“TestAync”。您能否建议如何从以下调用中检索(客户端代码)响应。

这是我正在打的客户电话,感谢您的帮助。 未来响应 = ClientBuilder.newClient().target("http://localhost:8080/testasync/test/async/test5").request().async().get();

@GET
@Path("async/{echo}")
public String asyncEcho(@PathParam("echo") final String echo, @Suspended final AsyncResponse ar) {
    TASK_EXECUTOR.submit(new Runnable() {

        @Override
        public void run() {
            try {
                Thread.sleep(SLEEP_TIME_IN_MILLIS);
            } catch (InterruptedException ex) {
                ar.cancel();
            }
            ar.resume(echo);
        }
    });
    return "TestAysnc";
}

【问题讨论】:

    标签: rest asynchronous jersey


    【解决方案1】:

    在异步情况下,返回值 (TestAsync) 将被忽略,因为 JAX-RS 运行时(例如 Jersey)期望发送回客户端的实体将通过 AsyncResponse#resume(Object) 调用提供。

    在您的特定情况下,test5 将返回给客户端,因为您正在使用此字符串对象恢复异步响应。

    有关更多信息,请查看 Jersey 用户指南中的 Asynchronous Server API 或阅读 JAX-RS 2.0 Specification

    【讨论】:

    • 谢谢 Michal,我有什么办法可以使用 rest 实现异步并在它继续执行其余任务之前返回值。我尝试了许多选项,但最终为任务创建了执行线程并将值(ACK)返回给客户端。 (这完全是我对异步方法的自定义实现)。如果这是一个推荐选项,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多