排课计算、课表发布、补考自动编排三类任务统一接入消息系统。

业务任务与 Outbox 消息同一事务落库,避免“数据库成功但消息没发出去”。
RabbitMQ 使用持久化消息、发布确认、手动 ACK、Quorum Queue、死信队列。
增加处理租约、心跳、异常重试、最大重试次数和幂等状态控制。
保留 InMemory 模式,开发环境无需安装 RabbitMQ。
支持多实例竞争消费,后续可以横向扩容。
新增 /health/messaging 消息系统健康检查。
This commit is contained in:
2026-07-26 20:51:42 +08:00 Unverified
parent 9f534c22f4
commit 6300645120
28 changed files with 6513 additions and 313 deletions
+30
View File
@@ -16,6 +16,13 @@ x-jiaowu-environment: &jiaowu-environment
ConnectionStrings__Redis: "redis:6379,abortConnect=false"
Cache__Enabled: "true"
Cache__KeyPrefix: "jiaowu:v1"
BackgroundJobs__Transport: RabbitMq
RabbitMq__HostName: rabbitmq
RabbitMq__Port: "5672"
RabbitMq__UserName: "${RABBITMQ_USER:-jiaowu}"
RabbitMq__Password: "${RABBITMQ_PASSWORD:?请在 .env.docker 中设置 RABBITMQ_PASSWORD}"
RabbitMq__VirtualHost: "/"
RabbitMq__UseTls: "false"
Jwt__Issuer: Jiaowu.Api
Jwt__Audience: Jiaowu.Web
Jwt__Key: "${JWT_KEY:?请在 .env.docker 中设置 JWT_KEY}"
@@ -34,6 +41,26 @@ x-json-logging: &json-logging
max-file: "3"
services:
rabbitmq:
image: rabbitmq:4.2-management-alpine
restart: unless-stopped
environment:
RABBITMQ_DEFAULT_USER: "${RABBITMQ_USER:-jiaowu}"
RABBITMQ_DEFAULT_PASS: "${RABBITMQ_PASSWORD:?请在 .env.docker 中设置 RABBITMQ_PASSWORD}"
healthcheck:
test:
- CMD
- rabbitmq-diagnostics
- -q
- ping
interval: 10s
timeout: 5s
retries: 12
start_period: 20s
volumes:
- rabbitmq-data:/var/lib/rabbitmq
logging: *json-logging
redis:
image: redis:8.8-alpine
restart: unless-stopped
@@ -96,6 +123,8 @@ services:
<<: *jiaowu-image
environment: *jiaowu-environment
depends_on:
rabbitmq:
condition: service_healthy
redis:
condition: service_started
mysql:
@@ -128,3 +157,4 @@ services:
volumes:
mysql-data:
rabbitmq-data: