apps/server/docs/ai-context/workers-and-runtime.md
统一入口在 src/bin/run.ts:
api
billing-consumer
billing-events,异步将 ledger、audit log、LLM 请求日志写入 DB这两个角色是当前服务端部署拆分的基本单位。
启动路径:
src/bin/run.tsrunApiServer()createApp()启动时会做的事情:
实现位置:
src/bin/run-billing-consumer.tssrc/services/billing-mq-worker.tssrc/services/billing-mq.ts工作流程:
billing-eventsflux.debited — 写 flux_transaction 和 flux_transactionllm.request.log — 写 llm_request_log相关环境变量:
BILLING_EVENTS_STREAMBILLING_EVENTS_CONSUMER_NAMEBILLING_EVENTS_BATCH_SIZEBILLING_EVENTS_BLOCK_MSBILLING_EVENTS_MIN_IDLE_MSbilling-mq.ts 把 Redis Streams 抽象成:
publish()ensureConsumerGroup()consume()claimIdleMessages()ack()这层约束了消息处理语义:
因此新增新的 stream consumer 时,最安全的方式通常是复用这层,不要自己裸写 XREADGROUP。
src/routes/chat-ws.ts 还有一套独立于 Redis Streams 的运行时机制:
Map这意味着:
pullMessagessync 端点如果要改 Redis key / channel 构造、Pub/Sub payload 或 Streams 边界,先看 redis-boundaries-and-pubsub.md。
初始化在 src/libs/otel.ts。
启用条件:
OTEL_EXPORTER_OTLP_ENDPOINT 存在覆盖面:
重要实现细节:
sdk.start() 必须发生在 metrics.getMeter() 之前/health 会被 HTTP instrumentation 忽略HOSTPORTAPI_SERVER_URLDATABASE_URLREDIS_URLAUTH_GOOGLE_CLIENT_IDAUTH_GOOGLE_CLIENT_SECRETAUTH_GITHUB_CLIENT_IDAUTH_GITHUB_CLIENT_SECRETSTRIPE_SECRET_KEYSTRIPE_WEBHOOK_SECRETBILLING_EVENTS_STREAMBILLING_EVENTS_CONSUMER_NAMEBILLING_EVENTS_BATCH_SIZEBILLING_EVENTS_BLOCK_MSBILLING_EVENTS_MIN_IDLE_MSOTEL_SERVICE_NAMESPACEOTEL_SERVICE_NAMEOTEL_TRACES_SAMPLING_RATIOOTEL_EXPORTER_OTLP_ENDPOINTOTEL_EXPORTER_OTLP_HEADERSOTEL_DEBUG如果你要改:
run.ts 的角色模型和 billing-mq-worker.tsbilling-mq-worker.ts 中增加新的事件处理分支rate-limit.ts 仍是单实例内存模型