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 依赖节点
- 更新了任务执行日志和错误处理章节,反映新的依赖结构
目录
简介
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 模板(用于测试与演示)
图表来源
- [[[[main.go]]]]
- [[[[root.go]]]]
- [[[[bi_api_leke.go]]]]
- [[[[bi_api_jushuitan.go]]]]
- [[[[client.go]]]]
- [[[[leke_client.go]]]]
- [[[[jushuitan_client.go]]]]
- [[[[config.go]]]]
章节来源
核心组件
- 命令行入口与根命令
- 根命令提供通用参数(如配置文件路径),并注册各服务命令
- 任务命令与执行包装器
- 为每个任务提供 Run 回调,内部完成配置加载、gRPC 客户端初始化、任务执行与资源清理
- 配置与服务发现
- 通过 bi-common 的 Nacos 客户端加载多 DataID 配置并合并;基于服务名与分组进行健康实例选择
- gRPC 客户端
- 统一初始化与关闭;按服务拆分客户端与业务方法封装,支持超时控制
章节来源
架构总览
bi-cron 的执行链路如下:
- 加载 Nacos 连接配置(本地/开发/测试/生产)
- 通过 bi-common 初始化 Nacos 客户端
- 从 Nacos 拉取应用配置(支持多个 DataID,后者覆盖前者)
- 通过服务发现获取目标服务地址
- 建立 gRPC 连接
- 执行具体任务方法
- 关闭连接并退出
图表来源
详细组件分析
命令行与任务编排
- 根命令
- 提供通用配置文件参数,缺省指向开发环境配置
- 服务命令
- 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
- 库存:异步获取
图表来源
- [[[[client.go]]]]
- [[[[leke_client.go]]]]
- [[[[leke_order.go]]]]
- [[[[leke_goods.go]]]]
- [[[[jushuitan_client.go]]]]
- [[[[jushuitan_inventory.go]]]]
章节来源
- [[[[client.go]]]]
- [[[[leke_client.go]]]]
- [[[[leke_order.go]]]]
- [[[[leke_goods.go]]]]
- [[[[jushuitan_client.go]]]]
- [[[[jushuitan_inventory.go]]]]
任务配置格式与执行策略
- 配置文件
- Nacos 连接配置:用户名/密码、服务端地址、命名空间、分组、超时
- 应用配置:各 gRPC 服务的服务名、分组、超时
- 执行策略
- 每个任务独立初始化/关闭连接,避免跨任务共享连接带来的并发问题
- 任务方法均带超时控制,超时由配置项解析得到
章节来源
- [[[[README.md]]]]
- [[[[config.go]]]]
- [[[[leke_order.go]]]]
- [[[[leke_goods.go]]]]
- [[[[jushuitan_inventory.go]]]]
与 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 .
章节来源