zoukankan      html  css  js  c++  java
  • @Async 异步http请求,汇总数据处理

    项目需求:

    请求第三方接口获取数据,一个小时大概有5000条左右的数据。

    吐槽一下,第三方接口竟然分页返回,一次只给2000条,擦了,只能异步请求然后汇总了。

    我需要每个小时获取数据,并对数据进行分析处理,将结果存到本地。

    具体实现:

    主要使用@Async注释,实现异步,用定时任务一个小时执行一次。

    @Async注释如何添加请参考我的另一篇随笔:

    https://www.cnblogs.com/SamNicole1809/p/12610398.html

    上代码:(示例)

    1 - 异步Http请求服务

    @Service
    public class AsyncService {
    
    // 注入HttpUtils
    @Async public CompletableFuture<String> getData(String uri, int page) {
    uri += "&page=" + page; return CompletableFuture.completedFuture(httpUtils.Get(uri)); } }

    2 - 异步一下子请求10000条(再让你分页返回,哼)

    // 注入AsyncService
    // 注意:在同一类中一个异步调用另一个异步是不生效的
    // 这点与@Transactional注解类似,可以查一下

    @Async
    public void getOneHourData(String uri) throws InterruptedException, ExecutionException { // 一页2000条,异步搞他10000条又怎样
    CompletableFuture
    <String> future1 = asyncSer.getData(uri, 1); CompletableFuture<String> future2 = asyncSer.getData(uri, 2); CompletableFuture<String> future3 = asyncSer.getData(uri, 3); CompletableFuture<String> future4 = asyncSer.getData(uri, 4); CompletableFuture<String> future5 = asyncSer.getData(uri, 5);
    // 等待所有异步请求完成 CompletableFuture.allOf(future1, future2, future3, future4, future5).join(); String data1 = future1.get();
    ......
    // 处理数据,保存到数据库 }

    3 - 定时任务处理数据

    // 注入service
    // cron表达式可以了解下,有在线生成工具,此处表示1个小时执行一次
    
    @Scheduled(cron = "0 0 * * * ?")
    @Async
    public void s3() throws ExecutionException, InterruptedException {
        // 由于有很多设备需要进行数据获取,我得意的笑,全异步
        List<Device> deviceList = ...;
        for (Device device : deviceList) {
            // 生成uri
            service.getOneHourData(uri);
        }
    }

    关键代码已经给出,可参考使用

    另外:第三方一次返回2000条数据是对的,返回速度快,也就是想让异步获取提高效率吧.

    知止而后有定;定而后能静;静而后能安;安而后能虑;虑而后能得。
  • 相关阅读:
    Zabbix,Nagios,OneAPM Servers 安装部署大比拼
    Android 手把手带你玩转自己定义相机
    Sublime Text3 快捷键
    超具体Windows版本号编译执行React Native官方实例UIExplorer项目(多图慎入)
    poj 1664 放苹果(递推)
    在HyperLedger Fabric中启用CouchDB作为State Database
    HyperLedger Fabric 1.0的Transaction处理流程
    如何将Bitcoin比特币区块链数据导入关系数据库
    在Ubuntu中部署并测试Fabric 1.0 Beta
    在Ubuntu上快速搭建基于Beego的RESTful API
  • 原文地址:https://www.cnblogs.com/SamNicole1809/p/13563283.html
Copyright © 2011-2022 走看看