V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
lien321
V2EX  ›  分享创造

[自研开源] MyData 数据集成之环境变量 v0.7.2

  •  
  •   lien321 · 288 天前 · 897 次点击
    这是一个创建于 288 天前的主题,其中的信息可能已经有所发展或是发生改变。

    数据集成之环境变量 v0.7.2

    开源地址:gitee | github

    详细介绍:MyData 基于 Web API 的数据集成平台

    部署文档:用 Docker 部署 MyData

    使用手册:MyData 使用手册

    试用体验:https://demo.mydata.work

    交流 Q 群:430089673

    概述

    MyData 基于数据资产理念设计,采用 Web API 作为数据传输通道 完全不侵入任何业务系统;

    API 通常不是简单的调用即可获得结果,需要传递外部的参数才能得到预期结果;

    API 的常见场景

    1. 身份验证和授权 类似 Web Token ,先通过认证 API 获取令牌 存储在客户端,随后每次通信都附带令牌;

    2. 参数筛选数据 当调用 API 时,通过参数筛选 准确获取所需数据,例如:员工在职状态、订单支付状态等;

    3. 分批获取数据 当处理大量数据或分页显示数据时,需要分批获取数据,例如:分页参数有 指定页数、每页的数量;

      ...

    环境&变量

    MyData 提供两层管理:环境管理变量管理

    环境变量流程

    • 环境管理 结合开发流程、部署环境等场景,统一管理 API 的运行环境,比如内部的:开发环境、测试环境、生产环境,外部的第三方厂商环境等;

      image-20240316001430164

    • 变量管理 按环境隔离管理变量,相同环境下 API 可共享变量;

      image-20240316001720724

      • 变量值来源:
        1. 手动登记变量,配置静态值,需要调整时再修改;
        2. 通过配置定时任务从 API 获取并更新变量值,下图示例是每分钟调用一次认证接口获取令牌 并保存到 token2 变量; image-20240316002035380
      • 使用变量:
        1. 在 API 的 Headers 和 Params 参数值中,通过${变量名}格式获取变量值; image-20240316005253119
        2. 在定时任务的请求参数中通过${变量名}格式获取变量值; image-20240316005637814

    定时任务中使用变量

    基于 数据集成之任务流程 介绍任务执行流程,在任务开始与调用 API 之间 增加环境变量的解析处理;

    变量解析流程

    以下是任务执行过程代码片段,其中jobVarService.parseVar(taskInfo);是任务开始后的第一步操作,具体变量的解析处理可详见 JobVarService.java

    taskInfo.appendLog("任务开始执行");
    ...
    // 标记本次执行是否成功
    boolean isJobSuccess = false;
    // 获取任务操作类型
    int opType = taskInfo.getOpType();
    
    try {
        // 解析并替换 api 中的环境变量
        jobVarService.parseVar(taskInfo);
        // 根据操作类型 执行读或写
        switch (opType) {
            // 提供数据
            case MdConstant.DATA_PRODUCER:
                ...
                break;
            // 消费数据
            case MdConstant.DATA_CONSUMER:
                ...
                break;
            default:
                throw new RuntimeException("不支持的任务类型:" + opType);
        }
    
        // 任务执行成功
        isJobSuccess = true;
    } catch (Exception e) {
        taskInfo.appendLog("任务执行失败,异常:{}", e.getMessage());
        e.printStackTrace();
    } finally {
        // 恢复原生 header 和 param ,恢复变量表达式,下次可获取最新变量值
        taskInfo.setReqHeaders(taskInfo.getOriginReqHeaders());
        taskInfo.setReqParams(taskInfo.getOriginReqParams());
    }
    
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2500 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 05:29 · PVG 13:29 · LAX 21:29 · JFK 00:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.