繁体   English   中英

RESTEasy +异步+回调方法+ Java

[英]RESTEasy + Asynchronous + Callback Method + Java

我想使用RESTEasy-JAXRS同时支持同步和异步调用。 我的异步调用应基于回调,其中异步请求将具有callbackURI,请求将被异步处理,并在完成后以操作状态/结果调用callbackURI。 有人可以指出我正确的地方吗? 我看到了很多有关轮询模型的信息,但没有使用RESTEasy进行回调。

我是异步事物的新手...

提前致谢!

谢谢rmlan。是的,但是我们在JAX-RS中支持使用@Suspended&AsyncResponse处理异步。 我使用以下代码做到了这一点,但是我无法找到对请求完成任务后调用API的客户端进行回调的方法。

@GET
@Path("/async")
public String checkAsync(@Suspended final AsyncResponse response) {
    response.setTimeoutHandler(new TimeoutHandler() {

        @Override
        public void handleTimeout(AsyncResponse asyncResponse) {
            response.resume(Response.status(Response.Status.SERVICE_UNAVAILABLE)
                    .entity("Operation time out.").build());
        }
    });
    response.setTimeout(2, TimeUnit.SECONDS);

    new Thread(new Runnable() {
            @Override
            public void run() {
                String result = veryExpensiveOperation();
                response.resume(result);
            }

            private String veryExpensiveOperation() {
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                logger.debug("Task is processed fully");
                return "Successful";
            }
        }).start();

    return "nothing";
}

类中的每个方法都有一个返回值(或者可能是void)。 但有时您需要从方法中进行一些回调。 这是解决方案。

public abstract class MyClass {

    public abstract void myCallbackMethod();

    public void myMethod(){

        for (int i = 0; i < 5; i++) {
            // do somthing
            myCallbackMethod();// it will implements in future.
        }

    }
}

当从MyClass创建对象时,必须实现myCallbackMethod抽象方法。 像这样

public class NewMain {

    public static void main(String[] args) {

       MyClass myClass=new MyClass() {

           @Override
           public void myCallbackMethod() {
               System.err.println("this is call back");
           }
       };
       myClass.myMethod();
    }

}

结果是

这是回电

这是回电

这是回电

这是回电

这是回电

这意味着您可以从类中的void方法获得五个回调。 当您不了解myCallBackMethod的正文内容时,这是一个好方法

真正的例子是从应用程序中的服务器下载文件。

您可以在收到字节后调用myCallBackMethod并进度条

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM