排课计算、课表发布、补考自动编排三类任务统一接入消息系统。
业务任务与 Outbox 消息同一事务落库,避免“数据库成功但消息没发出去”。 RabbitMQ 使用持久化消息、发布确认、手动 ACK、Quorum Queue、死信队列。 增加处理租约、心跳、异常重试、最大重试次数和幂等状态控制。 保留 InMemory 模式,开发环境无需安装 RabbitMQ。 支持多实例竞争消费,后续可以横向扩容。 新增 /health/messaging 消息系统健康检查。
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user