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

如何反复检查Restful API服务?

侯池暝
2023-03-14

我正在尝试创建一个SpringBoot应用程序,该应用程序将使用来自第三方REST API的数据,并根据数据的事件/更改将Websocket通知推送到我自己的客户端。我使用的数据经常变化,有时一秒钟几十次(加密货币价格波动的行为与此数据类似)。我希望以固定的间隔(例如,每1-10秒)重复调用API,观察某些事件/更改,并在这些事件发生时触发Websocket推送。

我已经能够构建一个简单的Spring Boot应用程序,它可以通过以下指南推送Websocket通知并使用API:

  • Spring。IO WebSocket
  • Spring。消耗性Rest

问题:我只能让应用程序从API请求一次数据。我花了几个小时搜索我能想到的“Spring重新设置模板多次/重复/持续调用”的每一个变化,但是我找不到解决我的具体用途的解决方案。我找到的最接近的例子使用重试,但即使是那些最终也会放弃。我希望我的应用程序不断请求这些数据,直到我关闭应用程序。我知道我可以用一个而(true)语句或类似的语句来包装它,但是对于像SpringBoot这样的框架来说,这似乎并不合适,并且在尝试实例化RestTem板时仍然存在问题。

如何实现RESTful API资源的持久查询?

下面是我在申请课上学到的东西

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableScheduling
public class Application {

    private static final String API_URL = "http://hostname.com/api/v1/endpoint";

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    RestTemplate restTemplate(RestTemplateBuilder builder){
        return builder.build();
    }

    @Bean
    public CommandLineRunner run(RestTemplate restTemplate) throws Exception {
        return args -> {
            Response response= restTemplate.getForObject(API_URL, Response.class);
            System.out.println(response.toString());
        };
    }
}

共有2个答案

甄霖
2023-03-14

在SpringConfig类或主类上添加@EnableScheduling注释。

您可以使用计划的fixedDelay或fixedRate

@Scheduled(fixedDelay = 10000)
    public void test() {
        System.out.println("Scheduler called.");
    }

@Scheduled(fixedRate  = 10000)
    public void test() {
        System.out.println("Scheduler called.");
    }

fixedDelay和fixedRate之间的差异:

固定延迟-确保在执行任务的完成时间和下一次执行任务的开始时间之间有n毫秒的延迟。

每n毫秒运行一次计划任务。

理想情况下,您应该在文件中外部化固定延迟或固定利率值application.properties:

@Scheduled(fixedDelayString  = "${scheduler.fixed.delay}")
    public void test() {
        System.out.println("Scheduler called.");
    }

在您的应用程序中。属性文件添加到以下配置:

scheduler.fixed.delay = 10000

希望这有帮助。

闻枫
2023-03-14

CommandLineRunner每次应用程序启动只运行一次。相反,您希望使用@Scheduled注释以固定的间隔执行重复的操作,如

    @Scheduled(fixedDelay = 1000L)
    public void checkApi() {
        Response response = restTemplate.getForObject(API_URL, Response.class);
        System.out.println(response.toString())
    }

它不需要是一个Bean,它可以只是一个简单的方法。有关更多信息,请参阅Spring指南https://spring.io/guides/gs/scheduling-tasks/

 类似资料:
  • thinkphp5编写的restful风格的API,集API请求处理,权限认证,自动生成文档等功能

  • 本文向大家介绍HashSet如何检查重复相关面试题,主要包含被问及HashSet如何检查重复时的应答技巧和注意事项,需要的朋友参考一下 当你把对象加入时,HashSet会先计算对象的值来判断对象加入的位置,同时也会与其他加入的对象的hashcode值作比较,如果没有相符的hashcode,HashSet会假设对象没有重复出现。但是如果发现有相同hashcode值的对象,这时会调用方法来检查hash

  • 好吧,我知道标题真的很模糊,但我无法思考如何说出我的问题,因此我无法谷歌它;这就是我问你们的原因 基本上,我有一个接受文件输入的构造函数,并根据文件名(在我的示例中,我们使用file.txt或employees.txt)对其进行处理。现在,我不知道这是否是一个好主意,或者是否有其他方法可以实现多个重复构造函数。这是我到目前为止的代码,感谢您的帮助!:

  • 问题内容: 我有一个字母数字字符串,我想检查其中是否有整数重复的模式。而且它们应该是连续的。 例 12341234q我们 应该告诉我重复 1234 。 1234qwe1234 应该 不 告诉我, 1234 ,因为它不是连续重复。 12121212 应该被视为重复 12 ,因为这是第一个重复的集合。但是,如果有一种算法可以找到 1212 作为 12 之前的重复集,那么我想它必须在 1212上 再次执

  • 问题内容: 我正在开发用于访问Redis服务器的Python服务(类)。我想知道如何检查Redis Server是否正在运行。而且如果某种原因我无法连接到它。 这是我的代码的一部分 它打印以下内容 即使我的Redis服务器未运行。 当我发现我的Python代码仅在对redis实例执行 set() 或 get() 时才连接到服务器。 所以我不希望其他服务使用我的类来获得异常说 我想返回正确的消息/错

  • 问题内容: 使用HTML,将创建一个复选框,如下所示: 使用javascript,我们可以选中以下复选框: 现在,我正在尝试使用jquery-mobile创建相同的页面。该复选框如下所示: 为什么这里没有呢?是这个名字吗?我应该删除属性名称并使用名称创建一个吗? 如何在此处使用Javascript / jQuery选中此复选框? 我尝试了上面的代码,但似乎不适用于此复选框。 问题答案: 您需要使用