Skip to content

bi-cron 定时任务服务

**本文引用的文件** - [[main.go]](../file/bi-cron/main.go) - [[README.md]](../file/bi-cron/readme.md) - [[go.mod]](../file/bi-cron/go.mod) - [[root.go]](../file/bi-cron/cmd/root.go) - [[bi_api_leke.go]](../file/bi-cron/cmd/bi-api-leke.go) - [[bi_api_jushuitan.go]](../file/bi-cron/cmd/bi-api-jushuitan.go) - [[config.go]](../file/bi-cron/internal/config/config.go) - [[client.go]](../file/bi-cron/internal/grpc/client.go) - [[leke_client.go]](../file/bi-cron/internal/grpc/bi-api-leke/client.go) - [[leke_order.go]](../file/bi-cron/internal/grpc/bi-api-leke/order.go) - [[leke_goods.go]](../file/bi-cron/internal/grpc/bi-api-leke/goods.go) - [[jushuitan_client.go]](../file/bi-cron/internal/grpc/bi-api-jushuitan/client.go) - [[jushuitan_inventory.go]](../file/bi-cron/internal/grpc/bi-api-jushuitan/inventory.go) - [[cronjob.yaml]](../file/bi-cron/k8s/cronjob.yaml)

更新摘要

所做更改

  • 更新了依赖关系分析,反映移除了对 bi-proto 模块的依赖
  • 更新了技术栈和依赖章节,删除了 bi-proto 相关内容
  • 更新了架构图和依赖关系图,移除了 bi-proto 依赖节点
  • 更新了任务执行日志和错误处理章节,反映新的依赖结构

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论
  10. 附录

简介

bi-cron 是一个面向阿里云 Kubernetes CronJob 的轻量级定时任务调度客户端,通过 Nacos 服务发现定位目标 gRPC 服务,并以命令行形式驱动单次任务执行。其设计目标是:

  • 通过 Nacos 自动发现目标服务地址
  • 使用 gRPC 调用后端微服务
  • 借助 Cobra 提供清晰的任务命令树,便于在 CronJob 中直接调用
  • 模块化设计,易于扩展新的服务与任务
  • 借助 bi-common 统一 Nacos 配置与服务发现

该服务当前集成了 bi-api-leke(订单与商品)与 bi-api-jushuitan(库存)两个业务服务,支持全量/增量订单同步、在售商品同步以及库存异步获取等任务。

更新 移除了对 bi-proto 模块的依赖,简化了服务间的通信架构。

项目结构

bi-cron 采用"入口程序 + 命令层 + 配置与服务发现 + gRPC 客户端"的分层组织方式,关键目录与文件如下:

  • main.go:程序入口,委托给 cmd 层
  • cmd/:Cobra 命令定义与任务执行包装器
  • internal/config/:Nacos 配置加载、应用配置解析与服务发现
  • internal/grpc/:gRPC 客户端初始化与各服务的业务方法封装
  • k8s/cronjob.yaml:示例 Job/CronJob 模板(用于测试与演示)

图表来源

章节来源

核心组件

  • 命令行入口与根命令
    • 根命令提供通用参数(如配置文件路径),并注册各服务命令
  • 任务命令与执行包装器
    • 为每个任务提供 Run 回调,内部完成配置加载、gRPC 客户端初始化、任务执行与资源清理
  • 配置与服务发现
    • 通过 bi-common 的 Nacos 客户端加载多 DataID 配置并合并;基于服务名与分组进行健康实例选择
  • gRPC 客户端
    • 统一初始化与关闭;按服务拆分客户端与业务方法封装,支持超时控制

章节来源

架构总览

bi-cron 的执行链路如下:

  1. 加载 Nacos 连接配置(本地/开发/测试/生产)
  2. 通过 bi-common 初始化 Nacos 客户端
  3. 从 Nacos 拉取应用配置(支持多个 DataID,后者覆盖前者)
  4. 通过服务发现获取目标服务地址
  5. 建立 gRPC 连接
  6. 执行具体任务方法
  7. 关闭连接并退出

图表来源

详细组件分析

命令行与任务编排

  • 根命令
    • 提供通用配置文件参数,缺省指向开发环境配置
  • 服务命令
    • bi-api-leke:订单与商品模块
    • bi-api-jushuitan:库存模块
  • 任务包装器
    • runJob/runJushuitanJob:统一处理配置加载、gRPC 初始化/关闭、错误处理与日志输出

图表来源

章节来源

配置与服务发现

  • Nacos 连接配置
    • 通过 configs/nacos-*.yaml 指定认证、服务端地址、命名空间、分组与超时
  • 应用配置
    • 从 Nacos 拉取 bi-common.yaml 与 bi-cron.yaml(或 gin-cron.yaml),后者覆盖前者
  • 服务发现
    • 基于服务名与分组选择健康实例,返回 ip:port

图表来源

章节来源

gRPC 客户端与任务方法

  • 统一初始化/关闭
    • client.go 负责初始化/关闭所有服务的 gRPC 连接
  • bi-api-leke
    • 订单:全量/增量同步
    • 商品:在售商品列表
  • bi-api-jushuitan
    • 库存:异步获取

图表来源

章节来源

任务配置格式与执行策略

  • 配置文件
    • Nacos 连接配置:用户名/密码、服务端地址、命名空间、分组、超时
    • 应用配置:各 gRPC 服务的服务名、分组、超时
  • 执行策略
    • 每个任务独立初始化/关闭连接,避免跨任务共享连接带来的并发问题
    • 任务方法均带超时控制,超时由配置项解析得到

章节来源

与 Kubernetes CronJob 的集成

  • CronJob/Job 模板
    • 通过容器命令传入任务参数与配置文件路径
    • 使用 ConfigMap 挂载不同环境的 Nacos 配置
    • 可设置并发策略、历史保留数量与重启策略
  • 示例
    • 全量/增量订单同步、在售商品同步、库存异步获取均有示例

章节来源

任务开发指南

  • 新增 gRPC 服务
    • 在 internal/grpc 下创建服务目录,实现 client.go 与业务方法
    • 在 internal/config/config.go 的 GRPCConfig 中添加对应配置结构
    • 在 cmd 下新增命令文件,注册到根命令下
  • 新增模块/任务
    • 在现有服务命令文件中添加子命令分组与具体任务命令
  • 配置多个 DataID
    • 在 Nacos 配置中声明多个 data_ids,后加载的配置会覆盖先前配置

章节来源

任务执行日志、错误处理与重试

  • 日志
    • 任务开始与结束均输出日志,包含结果摘要
  • 错误处理
    • 配置加载失败、gRPC 初始化失败、任务执行失败均以致命错误处理
  • 重试机制
    • 当前未内置重试逻辑,建议在 CronJob 层面通过失败历史限制与重启策略控制

章节来源

与业务服务的集成与数据交互

  • 服务发现
    • 通过 Nacos 服务名与分组选择健康实例,返回 ip:port
  • 数据交互
    • 使用 gRPC 客户端直接调用后端服务方法
  • 默认地址回退
    • 若未配置服务名,则在本地开发场景使用默认地址

章节来源

依赖关系分析

更新 移除了对 bi-proto 模块的依赖,简化了服务间的通信架构。

  • 外部依赖
    • Cobra:命令行框架
    • bi-common:Nacos 配置与服务发现
    • gRPC:RPC 通信
    • Nacos SDK:配置与服务发现
  • 内部依赖
    • cmd 层依赖 internal/config 与 internal/grpc
    • internal/grpc 依赖 internal/config

图表来源

章节来源

性能考虑

  • 连接复用与并发
    • 每个任务独立初始化/关闭连接,避免跨任务竞争;如需提升吞吐,可在服务层引入连接池与并发控制
  • 超时控制
    • 通过配置项设置超时,防止长尾任务阻塞
  • 资源限制
    • CronJob 中可设置 CPU/Memory 的 requests/limits,避免突发占用

故障排除指南

  • 无法连接 Nacos
    • 检查 configs/nacos-*.yaml 的地址、端口、命名空间与认证信息
  • 服务发现失败
    • 确认服务名与分组正确,目标服务处于健康状态
  • gRPC 连接失败
    • 检查服务地址是否可达,确认服务端 TLS/鉴权策略
  • 任务执行失败
    • 查看任务日志输出,定位具体方法与返回值
  • 配置未生效
    • 确认 Nacos 中 data_ids 的顺序与内容,后加载配置会覆盖先加载配置

章节来源

结论

bi-cron 以简洁的分层设计实现了对多业务服务的定时任务编排,结合 Nacos 与 gRPC,具备良好的可扩展性与运维友好性。通过 CronJob 的调度能力,可稳定地执行各类数据同步任务。建议在生产环境中配合合适的资源限制、健康检查与告警策略,确保任务的高可用与可观测性。

附录

  • 常用命令
    • 查看帮助:bi-cron --help;bi-cron bi-api-leke --help;bi-cron bi-api-jushuitan --help
    • 订单全量同步:bi-cron bi-api-leke order taobao-sync-full
    • 订单增量同步:bi-cron bi-api-leke order taobao-sync-increment
    • 在售商品同步:bi-cron bi-api-leke goods taobao-sync-items-onsale
    • 库存异步获取:bi-cron bi-api-jushuitan inventory async-fetch
  • 构建
    • 本地构建:go build -o bi-cron .
    • Docker 构建:docker build -t bi-cron:latest .

章节来源