我有一个Java REST API,该API将由IoT设备用于发送数据。每个设备都有一个时间段(例如15秒)与API通信。在那段时间内,可以有多个带有相同数据的消息。
我想做的是,当API从设备接收新消息时,它会等到时间段结束并收集收到的消息。并仅在时间段结束时处理消息。
我应该在给定时间段内收集和处理消息?
谢谢。
编辑使用Spring Boot。
您应该尝试使用异步端点来呼叫syncronous rets。您可以定义超时后的操作。
例如,在Spring Boot中,您可以返回可可并使用taskexecutor:
@Controller
public class MyController {
@RequestMapping("/endpoint")
public @ResponseBody WebAsyncTask<String> handleRequest (HttpServletRequest request) {
Callable<String> callable = () -> {
return "Callable";
};
ConcurrentTaskExecutor taskExecutor = new ConcurrentTaskExecutor(Executors.newFixedThreadPool(1));
return new WebAsyncTask<>(15000L, taskExecutor, callable);
}
}
您可能需要在弹簧中添加一些配置,以使任务执行人线程池:
@SpringBootApplication
public class AsyncConfigExample {
@Bean
WebMvcConfigurer configurer(){
return new WebMvcConfigurerAdapter(){
@Override
public void configureAsyncSupport (AsyncSupportConfigurer configurer) {
ThreadPoolTaskExecutor t = new ThreadPoolTaskExecutor();
t.setCorePoolSize(10);
t.setMaxPoolSize(100);
t.setQueueCapacity(50);
t.setAllowCoreThreadTimeOut(true);
t.setKeepAliveSeconds(120);
t.initialize();
configurer.setTaskExecutor(t);
}
};
}
}
这里更多地阅读:
- Spring MVC:配置异步请求处理
- 春季启动:用队列备份的异步方法