2017-05-26 62 views
0

我想在Spring Boot中遇到以下用例。Spring Boot http请求长轮询

  1. 我有第三方REST API,如果有什么要返回或需要10秒发送空白响应,它会返回一个响应asap。
  2. 我需要不断调用这个API意味着如果API返回响应发送该响应来处理并再次调用该API意味着我需要长时间轮询该API,但是一旦我得到响应就不需要时间间隔再次轮询。
  3. 我想要独立的线程处理响应。
  4. 这不是一个Web应用程序。我只想用纯java(spring)而不是java脚本或JQuery来实现它。

我如何在Spring Boot中实现这一点。我读了关于彗星和气氛,而谷歌搜索,但没有具体的信息 或有关第三方HTTP请求轮询的示例代码,或者可能是我缺少的东西。

可能是我正在寻找像卡夫卡消费者客户端的解决方案。

更新

我已经与Java定时器如下尝试这样做,你可以建议,如果有任何其他更好的办法。

public void pollMsg(){ 
    Timer timer = new Timer(); 
    TimerTask myTask = new TimerTask() { 
     @Override 
     public void run() { 
      CompletableFuture.supplyAsync(this::sendMsg).thenAccept(this::notify); 
     } 

     private <String> java.lang.String sendMsg() { 
      RestTemplate restTemplate = new RestTemplate(); 
      java.lang.String msg = restTemplate.getForObject("http://example.com", java.lang.String.class); 
      return msg; 
     } 

     private <String> void notify(java.lang.String msg) { 
      System.out.println("Process this message for further: " + msg); 
      run(); 
     } 
    }; 
    timer.schedule(myTask, 1000, 2000); 

} 

回答

0

那么,为什么你不能运行一个后台线程,将完成你想要的循环?

  1. 发送API请求
  2. 获得回应 - 从你的描述10秒后,它可以是东西或空响应该响应
  3. 转到1
+0

我已经更新的问题

  • 过程如果有解决方案,可以请让我知道是否有更好的解决方案。 – ppb

  • +0

    对我来说很好 – Antoniossss