国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[自研開源] MyData 數(shù)據(jù)集成的任務流程 v0.7.1

這篇具有很好參考價值的文章主要介紹了[自研開源] MyData 數(shù)據(jù)集成的任務流程 v0.7.1。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

開源地址:https://gitee.com/LIEN321/mydata-blade
詳細介紹:MyData 基于 Web API 的數(shù)據(jù)集成平臺 v0.7.0
部署文檔:用 Docker 部署 MyData v0.7.1
使用手冊:MyData 使用手冊v0.7.1
交流Q群:430089673

MyData后端結構

MyData的后端由3個子服務組成,分別是管理服務、任務服務、業(yè)務數(shù)據(jù)服務

  • 管理服務:通過項目、數(shù)據(jù)標準、應用API、環(huán)境的管理 配置出同步業(yè)務數(shù)據(jù)的任務;
  • 任務服務:根據(jù)配置的任務 定時調(diào)用應用API和數(shù)據(jù)服務 實現(xiàn)業(yè)務數(shù)據(jù)的傳輸和存儲;
  • 數(shù)據(jù)服務:封裝業(yè)務數(shù)據(jù)的隔離機制和讀寫操作;

依賴的組件:

  • MySQL:存儲管理數(shù)據(jù);
  • Redis:緩存管理數(shù)據(jù)和任務;
  • MongoDB;存儲業(yè)務數(shù)據(jù);

下圖從數(shù)據(jù)流角度 展示3個子服務的關聯(lián):
[自研開源] MyData 數(shù)據(jù)集成的任務流程 v0.7.1,MyData,開源,數(shù)據(jù)倉庫
注:開源版本采用單體SpringBoot;

任務服務

配置任務

任務主要包括:項目環(huán)境、數(shù)據(jù)標準、應用API、任務類型、字段映射、任務周期;

  • 項目環(huán)境:確定應用API的統(tǒng)一前綴地址;
  • 數(shù)據(jù)標準:明確集成的業(yè)務數(shù)據(jù)的數(shù)據(jù)結構;
  • 應用API: 業(yè)務數(shù)據(jù)的傳輸通道;
  • 任務類型:明確數(shù)據(jù)的傳輸方向,提供數(shù)據(jù)表示從應用API讀取業(yè)務員數(shù)據(jù)、消費數(shù)據(jù)表示向應用API發(fā)送業(yè)務數(shù)據(jù);
  • 字段映射:配置接口響應結構中 與標準數(shù)據(jù)字段的映射關系;
  • 任務周期:定期執(zhí)行任務的時間間隔,格式為cron表達式;
    [自研開源] MyData 數(shù)據(jù)集成的任務流程 v0.7.1,MyData,開源,數(shù)據(jù)倉庫

任務流程

數(shù)據(jù)集成的任務執(zhí)行流程如下圖:
[自研開源] MyData 數(shù)據(jù)集成的任務流程 v0.7.1,MyData,開源,數(shù)據(jù)倉庫文章來源地址http://www.zghlxwxcb.cn/news/detail-839641.html

  1. 任務服務啟動時(即MyData系統(tǒng)啟動),查詢所有運行狀態(tài)的任務;
public class JobExecutor implements ApplicationRunner {
    ...
    
    @Override
    public void run(ApplicationArguments args) {
        // 移除已有緩存
        jobCache.removeAll();
    
        // 查詢已啟動的任務
        List<Task> tasks = taskService.listRunningTasks();
        log.info("tasks.size() = " + tasks.size());
        if (CollUtil.isNotEmpty(tasks)) {
            tasks.forEach(this::startTask);
        }
    }

    ...
}
  1. 根據(jù)任務的cron表達式,計算任務的下次執(zhí)行時間;
/**
 * 根據(jù) 任務的上次執(zhí)行時間 和 設定間隔規(guī)則,計算任務的 下次執(zhí)行時間
 *
 * @param taskInfo 定時任務
 */
private void calculateNextRunTime(TaskInfo taskInfo) {
    Assert.notNull(taskInfo);
    Assert.notEmpty(taskInfo.getTaskPeriod());

    Date date = taskInfo.getStartTime();
    if (taskInfo.getFailCount() > 0) {
        date = taskInfo.getNextRunTime();
    }

    CronExpression cronExpression = new CronExpression(taskInfo.getTaskPeriod());
    Date nextRunTime = cronExpression.getNextValidTimeAfter(date);
    taskInfo.setNextRunTime(nextRunTime);
}
  1. 計算任務的下次執(zhí)行時間 與 當前時間的時間差,以時間差作為緩存失效期 將任務存入redis緩存;
/**
 * 緩存任務
 *
 * @param taskInfo 任務對象
 * @throws IllegalArgumentException 緩存時長無效
 */
public void cacheJob(TaskInfo taskInfo) throws IllegalArgumentException {
    // 計算任務緩存有效時長
    long expire = DateUtil.between(taskInfo.getStartTime(), taskInfo.getNextRunTime(), DateUnit.SECOND);
    if (expire <= 0) {
        throw new IllegalArgumentException(StrUtil.format("expire <= 0, startTime = {}, nextRunTime = {}"
                , DateUtil.format(taskInfo.getStartTime(), DatePattern.NORM_DATETIME_MS_PATTERN)
                , DateUtil.format(taskInfo.getNextRunTime(), DatePattern.NORM_DATETIME_MS_PATTERN)));
    }

    redisUtil.set(CACHE_TASK + taskInfo.getId(), taskInfo);
    redisUtil.set(CACHE_JOB + taskInfo.getId(), taskInfo.getId(), expire);
    taskInfo.appendLog("任務存入redis,緩存時長 {} 秒", expire);
}
  1. 通過監(jiān)聽redis的key失效事件,獲得待執(zhí)行的任務;
public class RedisKeyExpiredListener implements MessageListener {

    private final JobExecutor jobExecutor;

    @Override
    public void onMessage(Message message, byte[] pattern) {
        String expiredKey = message.toString();
        if (StrUtil.startWith(expiredKey, JobCache.CACHE_JOB)) {
            String taskId = StrUtil.subSuf(expiredKey, JobCache.CACHE_JOB.length());
            jobExecutor.notify(taskId);
        }
    }
}
  1. 將任務加入待執(zhí)行的線程池,隨后即可執(zhí)行
/**
 * 任務存入執(zhí)行隊列
 *
 * @param taskInfo 任務
 */
private void executeJob(TaskInfo taskInfo) {
    taskInfo.appendLog("任務存入執(zhí)行隊列");
    Runnable runnable = new JobThread(taskInfo);
    getThreadPoolExecutor().execute(runnable);
}
  1. 根據(jù)任務類型分別執(zhí)行提供數(shù)據(jù)消費數(shù)據(jù)流程;
    1. 提供數(shù)據(jù)
      1. 調(diào)用應用API,獲取json格式數(shù)據(jù);
      2. 根據(jù)任務中字段映射 解析json為業(yè)務數(shù)據(jù)Map集合;
      3. 調(diào)用數(shù)據(jù)服務 將業(yè)務數(shù)據(jù)存入MongoDB;
case MdConstant.DATA_PRODUCER:
    // 調(diào)用api 獲取json
    String json = ApiUtil.read(taskInfo);
    // 將json按字段映射 解析為業(yè)務數(shù)據(jù)
    jobDataService.parseData(taskInfo, json);
    // 根據(jù)條件過濾數(shù)據(jù)
    jobDataFilterService.doFilter(taskInfo);
    // 保存業(yè)務數(shù)據(jù)
    jobDataService.saveTaskData(taskInfo);
    // 更新環(huán)境變量
    jobVarService.saveVarValue(taskInfo, json);

    break;
  1. 消費數(shù)據(jù)
    1. 根據(jù)任務所選數(shù)據(jù)標準,查詢業(yè)務數(shù)據(jù);
    2. 再根據(jù)字段映射,將業(yè)務數(shù)據(jù) 轉為指定的json對象集合;
    3. 調(diào)用應用API,傳輸json數(shù)據(jù);
case MdConstant.DATA_CONSUMER:
    List<BizDataFilter> filters = taskInfo.getDataFilters();
    if (CollUtil.isNotEmpty(filters)) {
        // 解析過濾條件值中的 自定義字符串
        parseFilterValue(filters);
        // 排除值為null的條件
        filters = filters.stream().filter(filter -> filter.getValue() != null).collect(Collectors.toList());
    }
    // 根據(jù)過濾條件 查詢數(shù)據(jù)
    String dataCode = taskInfo.getDataCode();
    if (StrUtil.isNotEmpty(dataCode)) {
        List<Map> dataList = bizDataDAO.list(MdUtil.getBizDbCode(taskInfo.getTenantId(), taskInfo.getProjectId(), taskInfo.getEnvId()), dataCode, filters);
        taskInfo.setConsumeDataList(dataList);
        // 根據(jù)字段映射轉換為api參數(shù)
        jobDataService.convertData(taskInfo);
    }
    // 調(diào)用api傳輸數(shù)據(jù)
    ApiUtil.write(taskInfo);
    break;
  1. 保存任務執(zhí)行日志;

到了這里,關于[自研開源] MyData 數(shù)據(jù)集成的任務流程 v0.7.1的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • OpenPCDet系列 | 7.1 KITTI數(shù)據(jù)集測試流程predicted_boxes預測

    OpenPCDet系列 | 7.1 KITTI數(shù)據(jù)集測試流程predicted_boxes預測

    測試流程的結構圖如下所示: generate_predicted_boxes函數(shù) 一開始的數(shù)據(jù)傳入為: 首先對于各類預測的特征圖進行重新reshape處理,將anchor那一維度進行拼接操作,比如:(16, 248, 216, 42) - (16, 321408, 7)。但是這里需要注意。 特征預測的box信息是基于anchor的一個偏移,也就是編碼后的

    2024年02月06日
    瀏覽(17)
  • (7)(7.1) 使用航點和事件規(guī)劃任務

    (7)(7.1) 使用航點和事件規(guī)劃任務

    文章目錄 前言 6.1.1 設置Home位置 6.1.2 視頻:制作并保存多路點任務 6.1.3 視頻:加載已保存的多航點任務 6.1.4 使用說明 6.1.5 提示 6.1.6 自動網(wǎng)格 6.1.7 任務指令 6.1.8 任務結束 6.1.9 任務重置 6.1.10 MIS_OPTIONS 6.1.11 任務再出發(fā) 6.1.12 任務大小 6.1.13 如何預取已存儲的任務地圖 6.1.14 偶

    2024年02月12日
    瀏覽(11)
  • 開源、易集成的Web可視化工具(流程圖、組態(tài)、SCADA、大屏)

    開源、易集成的Web可視化工具(流程圖、組態(tài)、SCADA、大屏)

    樂吾樂 Meta2d.js 是一個完全從零自主研發(fā)的國產(chǎn)開源 Web 繪圖工具。底層使用 canvas,可以自定義擴展豐富等動效。通過引擎 + 圖形庫+中間件的架構模式能夠方便快速的集成到各種前端項目,實現(xiàn)專屬自己的可視化平臺。 Meta2d.js 集實時數(shù)據(jù)展示、動態(tài)交互、數(shù)據(jù)管理等一體,

    2024年02月05日
    瀏覽(25)
  • 云原生開源項目CNSI(Narrows)v0.4發(fā)布

    云原生開源項目CNSI(Narrows)v0.4發(fā)布

    云原生安全開源項目 CNSI(項目代號:Narrows)發(fā)布了 0.4 版本,新增了 “cnsi-scanner-trivy” 的組件,幫助用戶更容易的進行工作負載的漏洞掃描。使用該組件也可以非常方便的進行鏡像內(nèi)軟件包漏洞、錯誤配置和 license 信息的掃描。除此之外,該版本引入了 Redis DB 用來存儲掃

    2024年02月12日
    瀏覽(17)
  • harbor v1.7.1鏡像倉庫無法訪問,并提示502 Bad Gateway

    在巡檢rancher平臺時發(fā)現(xiàn)有一個服務運行報錯了,查看該服務容器事件時提示連接不到harbor鏡像倉庫。 發(fā)現(xiàn)無法訪問時,第一時間是通過瀏覽器去訪問harbor倉庫是否能正常訪問: http://harbor.jx.shu.com 發(fā)現(xiàn)無法訪問,然后登入到對應的harbor服務器上去查看harbor服務是否正常。 通

    2024年02月19日
    瀏覽(15)
  • Mistral 7B v0.2 基礎模型開源,大模型微調(diào)實踐來了

    Mistral 7B v0.2 基礎模型開源,大模型微調(diào)實踐來了

    Mistral AI在3月24日突然發(fā)布并開源了 Mistral 7B v0.2模型,有如下幾個特點: 和上一代Mistral v0.1版本相比, 上下文窗口長度從8k提升到32k ,上下文窗口(context window)是指語言模型在進行預測或生成文本時,所考慮的前一個token或文本片段的大小范圍。隨著上下文窗口長度的增加

    2024年04月26日
    瀏覽(24)
  • 數(shù)據(jù)倉庫與數(shù)據(jù)集成架構:數(shù)據(jù)倉庫與數(shù)據(jù)倉庫規(guī)范與標準的制定與應用

    數(shù)據(jù)倉庫是一種用于存儲和管理大量結構化數(shù)據(jù)的系統(tǒng),它的主要目的是為了支持數(shù)據(jù)分析和報告。數(shù)據(jù)倉庫通常包括一個或多個數(shù)據(jù)源,這些數(shù)據(jù)源可以是來自不同的系統(tǒng)或來自不同的數(shù)據(jù)庫。數(shù)據(jù)倉庫的設計和實現(xiàn)需要考慮到數(shù)據(jù)的質量、一致性、可用性和安全性等方面

    2024年04月09日
    瀏覽(67)
  • 開源和自研——機器人

    MPC技術:封閉性非常高。沒有開源方案可抄。 因為開源,不需要從0構建。 這也是前兩年,國外一開源華為就遙遙領先。 射頻芯片/射頻天線:技術封閉。華為雖然做通信,但卻沒有攻破。 鴻蒙:基于AOSP(Android Open Source Project(Android 開源項目)) 國內(nèi)自動駕駛系統(tǒng)2018年后

    2024年02月12日
    瀏覽(15)
  • 【入駐流程】自研系統(tǒng)申請奇門appkey

    【入駐流程】自研系統(tǒng)申請奇門appkey

    奇門介紹 “奇門”是阿里巴巴提出的一套“系統(tǒng)與系統(tǒng)之間對接”的解決方案,致力于解決新零售場景下不同系統(tǒng)間通信協(xié)作中的相關問題,對于行業(yè)的標準場景的對接(如ERP-WMS、ERP-POS等)制定標準化的協(xié)議,收斂適配成本,服務商的系統(tǒng)只需一次對接,即可適配所有合作

    2024年02月06日
    瀏覽(27)
  • 基于 STM32自研多任務+SpringBoot+Vue 農(nóng)業(yè)大棚智能調(diào)光系統(tǒng)

    基于 STM32自研多任務+SpringBoot+Vue 農(nóng)業(yè)大棚智能調(diào)光系統(tǒng)

    工作以后常常容易感到疲于奔命,即使在周末也沒有得到高質量的休息。打工人/學生黨如何過周末?你有哪些延長周末和下班時間的好方法嗎?- 方法就是多積累,多發(fā)博客,將感悟全寫出來??!,接下來我給大家展示一個課程設計:源碼和硬件端代碼就不與展示了,在該博

    2024年02月14日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包