Skip to content

Repository files navigation

RelayOps

RelayOps

面向多租户场景的事件接入与 Webhook 可靠投递平台

CI Java 21 Spring Boot 4.1 React 19 TypeScript

RelayOps 运维控制台

RelayOps 接收事件后,在同一数据库事务中创建投递和 Outbox 记录,再由 RabbitMQ 驱动 Worker 发起真实 HTTP 请求。控制台完整展示每次投递、重试、失败、死信和回放过程。

核心能力

方向 实现
一致性 PostgreSQL 事务型 Outbox,publisher confirm 后才完成发布
幂等 租户级幂等键、投递唯一约束、单调递增的尝试历史
可靠投递 有限退避重试、Retry-After、死信、回放、崩溃恢复
多租户 JWT/API Key 认证,所有业务查询强制租户隔离
流量治理 Redis Lua 令牌桶、端点并发租约、队列背压
安全 HMAC 请求签名、稳定投递 ID、SSRF 防护、响应体/超时上限
可观测性 Prometheus、健康探针、结构化日志、端到端状态页面
扩展方式 同一制品支持 apiworkerall,Worker 可独立水平扩容

RelayOps 提供的是至少一次投递尝试。如果接收方已经成功处理请求,而 Worker 在记录结果前崩溃,系统会使用相同的 X-RelayOps-Delivery-Id 重试;接收方应据此去重。

架构

Producer -> API -> PostgreSQL (event + deliveries + outbox)
                         |
                    Outbox Publisher
                         v
                RabbitMQ ready / retry / DLQ
                         |
                    Worker replicas
                         v
                   Signed Webhook HTTP

Redis -> distributed rate limits + per-endpoint concurrency leases

PostgreSQL 是业务事实源;RabbitMQ 负责工作分发、确认和重试;Redis 只保存可丢弃的协调状态。详细设计见架构说明ADR

本地运行

本项目按 Windows 本地开发环境编写,PostgreSQL、RabbitMQ、Redis 使用同一台 Ubuntu 虚拟机(示例地址 192.168.150.101)。需要:

  • PowerShell 7 或 Windows PowerShell 5.1
  • Node.js 24+
  • 可访问上述虚拟机中间件
  • 网络可下载 Temurin JDK 与 Maven 依赖

1. 克隆

git clone https://github.com/Sj295/RelayOps.git
Set-Location RelayOps

2. 首次配置

虚拟机首次使用时,以管理员身份执行 ops/postgres/bootstrap.sql,并用同一应用密码初始化 RabbitMQ:

psql -h 192.168.150.101 -U postgres `
  -v relayops_password="<your-app-password>" `
  -f ops/postgres/bootstrap.sql

.\scripts\provision-rabbit.ps1 `
  -HostName 192.168.150.101 `
  -AdminUser '<rabbit-admin>' `
  -AdminPassword '<rabbit-admin-password>' `
  -AppPassword '<your-app-password>'

然后运行本地配置。脚本会安全读取 PostgreSQL/RabbitMQ 应用密码,生成 JWT 和初始化令牌,创建被 Git 忽略的 .env,安装工作区 JDK、构建后端并安装前端依赖:

.\scripts\dev.ps1 setup

所有敏感值只保存在本地 .env,不会进入 Git。

3. 启动

.\scripts\dev.ps1 start

打开 http://127.0.0.1:5173。首次进入时选择 Create the owner account,初始化令牌可在本地 .envRELAYOPS_BOOTSTRAP_TOKEN 中查看。

.\scripts\dev.ps1 status   # 查看状态
.\scripts\dev.ps1 stop     # 停止服务

验证

.\scripts\verify.ps1

该命令执行后端单元/真实 PostgreSQL 集成测试、前端 Vitest 和生产构建。连接隔离的 relayops_it 数据库与 /relayops-it vhost 后,可使用 -LiveInfrastructure 运行完整故障套件。

已执行结果:100 请求/秒持续 15 秒,1,500 次接入、0 HTTP 失败、p95 16.16 ms;固定负载下 3 个 Worker 相比 1 个 Worker 将投递端到端 p95 降低约 89.3%。详见实测结果

项目结构

backend/       Spring Boot API、Worker 与数据库迁移
frontend/      React/TypeScript 运维控制台与 E2E
ops/           PostgreSQL、RabbitMQ 初始化资产
scripts/       本地配置、启动和验证脚本
tests/k6/      接入与幂等负载脚本
docs/          架构、ADR 与实测结果

技术栈

Java 21 · Spring Boot 4.1 · PostgreSQL · RabbitMQ · Redis · React 19 · TypeScript · Vite · Playwright · k6

About

Enterprise-grade multi-tenant event ingestion and reliable webhook delivery platform.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages