[英]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.