8231b1e0e1486e137e878d8cc9bdfc0d812d43b6
根因:fallbackToDatabaseDirectly / rebuildRetryQueueOnStartup 批量入队时, 取的是 push_message_record.next_retry_time(只在内存设置、不保证落库,常为 null), 而调度权威其实是 push_message_retry_queue.next_retry_time(已落库、查询已保证非空)。 定时任务回落 DB 时拿到 null 的 message,addToRetryQueue 调 atZone 即 NPE, 整个 SMS 重试定时任务被带崩。 治本:新增 fillNextRetryTimeFromQueue,用队列记录的权威 nextRetryTime 回填 message 再入队,两条批量路径各调用一次 —— 不丢消息、照常重试。 兜底:addToRetryQueue 对 nextRetryTime==null 打 warn 并跳过单条, 保证任何坏数据都不会再把整批/整个定时任务带崩。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Description
Languages
Java
100%