对齐 redis-stream 的 reclaim 耗尽语义,兑现"换 MQ 业务不动"契约:此前 rocketmq 只有 broker 默认 16 次重投、无 RETRY_EXHAUSTED 落库。 - setMaxReconsumeTimes 对齐 @MqListener(maxRetry)(缺省 3),不再用 broker 默认 16 - 抽出 consumeBatch:reconsumeTimes 达 maxRetry 时回调 retryExhaustedHandler 落库并 ACK 终止;未达则 RECONSUME_LATER - onRetryExhausted 落库 best-effort:毒消息 payload 反序列化失败时留 null、至少保留 key/tag,并隔离 handler 自身异常 - 补消费逻辑单测(耗尽落库 / 未耗尽重投 / 成功投递) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>