0

我有一个球衣服务,其中包含一个计时器任务,它轮询特定值。只有当我从轮询中获得特定值时,我才想返回响应。有什么办法可以做到吗?

我的代码是:

@Path("/poll")
public class PollService{
    String response = null;
    @GET
    @Produces(javax.ws.rs.core.MediaType.TEXT_PLAIN)
    public String pollResponse(@Context HttpServletRequest request){
       MyTimer poller = new MyTimer();
       final Timer timer = new Timer();
       timer.scheduleAtFixedRate(poller, 0, 5000);
       return response;
    }
    private class MyTimer extends TimerTask{
         @Override
         public void run(){
             //Poll
             //Change value of response upon condition
         }
    }

在“响应”变量的值设置为“成功”之前,我不希望服务返回任何值。我该怎么做才能做到这一点?

4

2 回答 2

1

您可以采取的一种方法:

  1. 将您的请求分成两个请求
  2. 第一个请求将接受请求并返回 202 Accepted 响应。202 resposne 将提供一个状态/轮询 url 来轮询异步任务结果
  3. 第二个请求将轮询提供的状态/轮询 url。作为响应,您可以将响应返回为 200 OK,正文为 IN_PROGRESS 或实际任务结果(如果已完成)。
于 2013-10-09T05:56:01.777 回答
0

您可以使用调用方法返回值的Callable。请查看Interface CompletionService & Class ExecutorCompletionService。

于 2013-10-09T09:12:22.417 回答