renatuly/LogiTrack

GitHub: renatuly/LogiTrack

一个基于 Java 和 Kafka 的异步微服务 pipeline 项目,模拟 BPM 风格流程编排并内置重试与死信队列的容错处理实践。

Stars: 0 | Forks: 0

# LogiTrack 模拟 BPM 风格流程工作流并内置事件处理实践的异步微服务 pipeline —— 包含 REST API、消息队列、异步 worker 和数据库状态协调。 客户端通过流程管理器服务提交一个流程,请求被持久化到 PostgreSQL 并发布到 Kafka,worker 服务消费该事件并通过第二个 Kafka topic 报告结果,随后流程管理器服务相应地更新数据库。 ## 技术栈 Java 17 · Spring Boot 3 · Apache Kafka (KRaft) · PostgreSQL 16 · Docker / Docker Compose · JUnit 5 + Mockito ## 架构 ``` Client │ POST /api/v1/processes ▼ process-manager-service ──► PostgreSQL (persist, status=PENDING) │ │ publish ▼ Kafka: process-events │ │ consume ▼ worker-service (simulates ~2s of work) │ │ publish result ▼ Kafka: process-results │ │ consume ▼ process-manager-service ──► PostgreSQL (update status: COMPLETED / FAILED) ``` 在多次失败时,消息将被路由到死信 topic (`process-events-dlt`),而不是无限重试。 ## 前置条件 - 带有 Docker Compose v2 的 Docker Desktop,**或者** - Java 17、Maven 以及本地 PostgreSQL + Kafka 实例 ## 使用 Docker Compose 运行 1. 在项目根目录下,复制示例环境文件: cp .env.example .env 2. 启动技术栈: docker compose up --build 3. process-manager-service 可在 `http://localhost:8081` 访问 4. worker-service 没有 HTTP 端口 —— 它仅在后台作为 Kafka consumer 运行 ## 示例请求 创建流程: ``` curl -X POST http://localhost:8081/api/v1/processes \ -H "Content-Type: application/json" \ -d '{"processType":"invoice"}' ``` 获取所有流程: ``` curl http://localhost:8081/api/v1/processes ``` 按状态过滤获取流程: ``` curl http://localhost:8081/api/v1/processes?status=PENDING ``` 按 ID 获取单个流程: ``` curl http://localhost:8081/api/v1/processes/{id} ``` 触发失败路径(用于测试重试/DLT 流程): ``` curl -X POST http://localhost:8081/api/v1/processes \ -H "Content-Type: application/json" \ -d '{"processType":"FAIL_TEST"}' ``` ## 如何阅读日志 ``` docker compose logs -f process-manager-service worker-service ``` **正常流程 (Happy path)** —— 在 POST 之后,查找: - `process-manager-service`:确认事件已发布到 `process-events` 的日志行 - `worker-service`:`[WORKER] Received process event for ID: ...`,大约 2 秒后,结果会发布到 `process-results` - 再次查看 `process-manager-service`:`ProcessResultListener` 获取结果并更新该行 通过后续的 `GET /api/v1/processes/{id}` 确认状态确实已更改 —— 它应该从 `PENDING` 变为 `COMPLETED`。 **失败路径** —— 设置 `processType: "FAIL_TEST"` 时,worker 在发布 `FAILED` 结果后抛出异常。观察重复的重试尝试(带有退避机制的 3 次重试),一旦耗尽,将出现一条日志行,指示消息已发送到死信 topic `process-events-dlt`。 ## 测试 ``` cd process-manager-service && mvn test cd worker-service && mvn test ```
标签:Kafka, PostgreSQL, SonarQube插件, Spring Boot, 域名枚举, 异步任务编排, 版权保护, 请求拦截, 软件成分分析