当前位置: 首页 > 知识库问答 >
问题:

Spring Boothttp请求长轮询

齐运诚
2023-03-14

我想在Spring Boot中遇到下面的用例。

  1. 我有一个第三方REST API,如果有任何东西要返回,它会尽快返回响应,或者花10秒钟发送空白响应。
  2. 我需要连续调用这个API,这意味着如果API返回响应,将该响应发送到进程,然后再次调用该API,这意味着我需要长时间轮询该API,但没有时间间隔,一旦我得到响应,就再次轮询。
  3. 我要独立线程处理响应。
  4. 这不是web应用程序。我只想用纯java(spring)实现它,而不是用java脚本或jQuery.

我如何在Spring Boot中实现这一点。我在谷歌搜索时读到了关于comet和atmosphere,但没有关于第三方HTTP请求轮询的具体信息或示例代码,或者可能是我遗漏了一些东西。

可能是我正在寻找一个像Kafka消费者客户的解决方案。

更新

我已经用下面的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);

}

共有1个答案

百里胜泫
2023-03-14

那么,为什么不能运行一个后台线程,在循环中完全执行您想要的操作呢?

  1. 发送API请求
  2. 获取响应-从您的描述中可以是某些东西或10秒后的空响应
  3. 处理响应
  4. 转到1。
 类似资料:
  • 我是一个新手,但我真的很喜欢长轮询的想法。 在阅读了它之后,我会这样实现它: 客户端请求服务器(AJAX) 服务器正在轮询DB以获取更改 识别更改时或服务器响应超时后 我的问题是,对于每一个请求,都在服务器上启动一个线程,并且每个线程都轮询DB。 在服务器上运行一个接受所有传入请求的线程不是更有效吗?例如: 客户端请求服务器(AJAX) 服务器将请求添加到队列(无响应) 辅助线程轮询数据库以获取与

  • 问题内容: 我最近在StackOverflow上问了一个有关我的功能的问题,人们建议我使用Ajax Long Polling。我花了几天的时间研究该主题,并尝试编写基本的长轮询代码,但是这些代码都没有起作用,而且我什么也做不了。 这是我的基本功能: 有人能够告诉我如何将其转变为基本的长轮询功能,或者甚至直接指向我需要到达的路径。很感谢任何形式的帮助。谢谢! 问题答案: 通常(即,当不使用长时间轮询

  • 长轮询在GCP PubSub JS SDK上可用吗? 我希望能够同时处理多个PubSub消息,例如: 这是它将如何在AWS上工作的一个示例: SQS队列包含超过5条消息。 侦听器将在单个中一次获得5条消息。事件

  • 长轮询是与服务器保持持久连接的最简单的方式,它不使用任何特定的协议,例如 WebSocket 或者 Server Sent Event。 它很容易实现,在很多场景下也很好用。 常规轮询 从服务器获取新信息的最简单的方式是定期轮询。也就是说,定期向服务器发出请求:“你好,我在这儿,你有关于我的任何信息吗?”例如,每 10 秒一次。 作为响应,服务器首先通知自己,客户端处于在线状态,然后 —— 发送目

  • 问题内容: 我正在研究ajax长期轮询,但感到困惑。传统的ajax调用和长时间轮询有什么不同 此示例仅以递归方式调用服务器。与setInterval中的传统调用不同。 问题答案: 顾名思义,“ 长时间轮询” 意味着长时间轮询某些内容。 这是实际过程的开始,您对服务器上的某个脚本进行ajax调用,在本例中为,您需要使服务器脚本(例如)足够智能,以便仅在所需数据可用时才响应请求,该脚本应等待指定的时间

  • 我有一个在数据库上运行查询的API。由于查询执行时间可能很长,比如3分钟到10分钟,我的负载平衡器返回“上游请求超时”,但我可以看到查询已提交到数据源,但对最终用户来说,它显示了错误的消息。如何应对这种情况? 我的职能