Spring Boot http请求长轮询

时间:2017-05-26 00:10:43

标签: java spring-boot

我希望在Spring Boot中遇到以下用例。

  1. 我有第三方REST API,如果有任何要返回的内容,则会尽快返回响应,或者需要10秒钟才能发送空白响应。
  2. 我需要连续调用此API意味着如果API返回响应,则将该响应发送到进程并再次调用该API 意味着我需要长时间轮询该API,但是一旦我得到响应就没有时间间隔再次轮询。
  3. 我想要独立的线程来处理响应。
  4. 这不是一个Web应用程序。我想只用纯java(spring)实现它,而不是用java脚本或JQuery实现它。
  5. 我如何在Spring Boot中实现它。我在谷歌上搜索彗星和大气,但没有具体的信息 或者有关第三方HTTP请求轮询的示例代码,或者可能是我遗漏了某些内容。

    可能我正在寻找像kafka消费者客户的解决方案。

    更新

    我用Java Timer尝试过这个,如果还有其他更好的方法,你可以建议。

    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);
    
    }
    

1 个答案:

答案 0 :(得分:0)

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

  1. 发送API请求
  2. 获取回复 - 从您的描述中可以是10秒后的某些内容或空响应
  3. 处理回复
  4. 转到1.