feat: 新增嵌入式分布式调度底座

- 提供通用调度 API、Quartz JDBC Provider 与独立 Starter

- 补充 MySQL、PostgreSQL、H2 建表脚本与接入校验

- 同步完善 Federation 与 Scheduler 模块说明
This commit is contained in:
2026-08-26 18:15:13 +08:00
parent 02b8fdd3ae
commit b4bdc392ee
47 changed files with 5169 additions and 1 deletions

View File

@@ -10,6 +10,8 @@ Easy-Agents 是一个轻量、可扩展的 Java AI 应用开发框架,覆盖
- MCP 客户端能力(调用、拦截、缓存与管理)
- 文档读取与切分、向量存储与检索
- 工作流执行引擎Flow与 Easy-Agents 适配支持
- 基于 Calcite 的 SQL 编译、方言适配与流式 JDBC 查询
- 基于 Quartz JDBC JobStore 的嵌入式分布式定时调度
## 模块说明
@@ -26,6 +28,8 @@ Easy-Agents 是一个轻量、可扩展的 Java AI 应用开发框架,覆盖
- `easy-agents-mcp`MCP 集成。
- `easy-agents-skill`:标准 Agent Skills 包模型、安全校验、资源存储与 ZIP 双向编解码。
- `easy-agents-flow`:流程编排核心引擎。
- `easy-agents-federation-sql`:高性能 SQL 联邦查询内核与可扩展数据库 Adapter。
- `easy-agents-scheduler`:业务无关的调度 API、Quartz Provider 与独立 Spring Boot Starter。
- `easy-agents-support`Flow 与 Easy-Agents 适配模块。
- `easy-agents-spring-boot-starter`Spring Boot 自动配置支持。
- `easy-agents-samples`:示例工程。
@@ -76,7 +80,9 @@ public static void main(String[] args) {
<dependency>
<groupId>com.easyagents</groupId>
<artifactId>easy-agents-bom</artifactId>
<version>0.0.1</version>
<version>1.2.0-RC</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
@@ -92,3 +98,37 @@ public static void main(String[] args) {
</dependency>
</dependencies>
```
## 嵌入式分布式调度
Spring Boot 项目可直接引入独立 Starter
```xml
<dependency>
<groupId>com.easyagents</groupId>
<artifactId>easy-agents-scheduler-spring-boot-starter</artifactId>
</dependency>
```
引用方需要先从 `easy-agents-scheduler-quartz` 构件的 `quartz-schema/` 目录选择 MySQL、PostgreSQL 或 H2 脚本,并纳入自己的 Flyway、Liquibase 或初始化流程。Starter 不会自动创建、删除或修改 Quartz 表。
最小配置:
```yaml
easy-agents:
scheduler:
enabled: true
# 多 DataSource 时必须指定 Bean 名称
data-source-bean-name: dataSource
quartz:
scheduler-name: easyAgentsScheduler
instance-id: AUTO
clustered: true
table-prefix: QRTZ_
thread-count: 8
shutdown-wait-timeout-millis: 30000
```
业务方将 `ScheduleHandler` 注册为 Spring Bean并通过 `ScheduleService` 创建 Cron 或一次性任务。调度触发采用至少一次语义Handler 需要使用 `scheduleId + scheduledFireTime` 或立即触发的 `invocationId` 实现业务幂等。应用关闭超过等待上限后会向 Handler 线程发送协作式中断;长耗时 Handler 必须正确响应线程中断,忽略中断的业务代码仍可能继续占用 Quartz Worker。完整建表说明见 `easy-agents-scheduler/easy-agents-scheduler-quartz/SCHEMA.md`
当前 Provider 固定使用 Quartz `2.5.2``easy-agents-bom` 已同步管理该传递依赖。若业务项目还引入了其他 BOM 或显式 Quartz 版本,接入时应执行 `mvn dependency:tree -Dincludes=org.quartz-scheduler:quartz`,确认最终解析版本仍为 `2.5.2`