|
|
646cc6c238
|
feat(mq-starter-core): 同 group 订阅 tag 不一致启动 fail-fast,病态 tag 表达式打 WARN
同组配不同 tag 时消息只投组内某一个消费者,不匹配方直接 ACK 吞掉、另一方
永远收不到(订阅关系不一致,静默丢消息级事故,README 原本只靠文字约定)。
现在注解扫描期强校验:同一 group 声明不等价的 tag 表达式直接 IllegalStateException,
报错点名 group、冲突表达式与两个方法。等价性按 MqTagMatcher.validParts 有效
tag 集合比较("A || B" 与 "B||A" 等价,*/空/病态式同为全收),只覆盖单应用内。
- MqTagMatcher 新增 validParts / looksMisconfigured,matches 重构为基于
validParts,解析口径单一来源(每消息多一次小集合分配,可忽略)
- 病态表达式("||"、纯空白:写了内容却解析不出有效 tag)扫描期打 WARN 不阻断,
redis 端静默全收 vs rocketmq 端行为不同的分叉维持现状(拍板记录不修)
- README tag 小节、CLAUDE.md 签名约束一节同步
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-16 12:21:10 +01:00 |
|
|
|
8bba71236f
|
feat(mq-starter-redis-stream): 订阅 stream 定时裁剪,复用 redis-stream.trim.* 默认开启
底层中间件的 trim 任务只认自己注册的 handler(无 handler 不启动),mq-starter 不走
handler 体系,此前只经 mq-starter 收发的 topic 无界涨 Redis 内存。driver 现自带
RedisStreamTrimScheduler:订阅时登记 stream,按 trim.interval-ms(默认 60s)对登记过的
stream 执行 XTRIM MAXLEN ~ maxlen(默认 10 万),stop 时随 driver 停止。
- maxlen<=0 视为关闭(XTRIM 0 会清空整条 stream,绝不能发出)
- 只裁订阅过的 stream,纯发送方不裁,与中间件 handler 即消费者的语义对齐
- 单 stream 裁剪失败仅 WARN,不中断其余 stream
- README trim/autoclaim 行改述真实行为,CLAUDE.md 模块描述同步
注意:默认开启,升级后订阅 stream 开始按 maxlen 封顶;裁剪不看消费进度,
堆积超限时最老的未消费消息会被删,容量按可容忍停机时长×生产速率估算。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-16 10:25:29 +01:00 |
|
|
|
2b635a4cd7
|
docs: 补多环境隔离跨 driver 差异与 redis-stream.* 底层配置表
- README 能力矩阵新增「多环境隔离」行:redis-stream 经底层 starter 拼 topic_env 后缀,
rocketmq 无对应机制;切换 mq.type 须知从两条扩为三条(隔离静默消失)。
- 配置项一节把「redis-stream.* 一般不用动」一句扩成完整表格(env-isolation/env/
read-count/block-ms/consumer-name/max-retry/trim/autoclaim),并标明 trim/autoclaim
只认中间件自己的 handler、对 mq-starter 不生效。
- CLAUDE.md 驱动差异清单同步。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-16 10:24:27 +01:00 |
|
|
|
c6e2db1275
|
docs: redis-stream tag 消费端过滤落地,README/CLAUDE.md 能力表述同步
翻转点清单移除 tag 一条;能力表新增 tag 行两端标齐;
信封表/属性表/FAQ 同步为"消费端模拟过滤"语义。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-16 13:46:10 +08:00 |
|
|
|
1f29c71dba
|
docs: 批量攒批两端对齐后的能力表述收尾(上轮遗留工作区改动)
README 能力表批量行 ⚠️→✅、引言补「含 idle flush」;CLAUDE.md 差异段
同步「整批失败为剩余差距、concurrency 唯一未兑现」口径。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-16 11:50:14 +08:00 |
|
|
|
ffa30a7631
|
docs: review 未修项记录为已知语义(README/CLAUDE.md)
用户拍板:#5 批间不保序、#7 停机强刷无超时、#4 start 无回滚、#10 三处
快照样板重复,记录为已知语义/结构注意,不按缺陷修。
- README:批量坑段补两条业务方可感知的已知语义(批间不保序;停机会排队
等业务批量方法、挂死会卡住优雅停机)。
- CLAUDE.md:dispatcher 段新增"已知语义/结构注意"条目(四条全记,含
改快照样板须三处同步的提醒)。
全景手册(gitignored)已同步,不进本 commit。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-15 03:40:07 +01:00 |
|
|
|
7e718dd632
|
docs: review 修复后停机口径同步(README/CLAUDE.md)
- CLAUDE.md:dispatcher 段补打烊拒收 markFail 复位一笔;新增"停机顺序"
约束条目(driver 停(异常吞掉)→ 定时器 shutdown+awaitTermination(30s)
等在途刷批 → 逐监听器 forceFlush → running=false)。
- README:批量坑位说明补"停机瞬间恰有一批在业务方法里跑时,停机等它
跑完,上限 30 秒"。
全景手册(gitignored)已同步更新,不进本 commit。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-15 03:06:30 +01:00 |
|
|
|
d5161fa650
|
fix(mq-starter-core): 终审两处停机缝隙——dispatcher 打烊拒收 + 定时器温和关闭
1) forceFlush 置 closed:driver.stop() 异步返回后残余线程再投递的消息一律
拒收抛 InProgress(不 ACK、下次启动重投),堵住正常停机丢最后一轮消息的缝隙;
检查先于去重,不留 processing 标记。
2) 定时器 shutdownNow→shutdown:不再打断正在执行的刷出,避免整批被误判失败;
后续执行照常取消,残留批由 forceFlush 接住(flushLock 串行兜底)。
终审 Important #1/#2,处置方案经用户确认。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-15 08:27:10 +08:00 |
|
|
|
b0e0422c10
|
docs: 批量 idle flush 落地后口径同步(README/CLAUDE.md)
批量语义从"无 idle flush、低频停滞、重启丢批"改为"超时(缺省 60s)/停机
强制刷出,仅 kill -9 丢未满批";注解属性表补 batchTimeoutMs 行,TODO 勾选。
全景手册(docs/,gitignored)已同步修改,不在本 commit。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-14 15:07:21 +01:00 |
|
|
|
ec5b22b392
|
docs: 去重默认开启口径落文档 + 异构发送方对接契约 + tag 用法教学
README:idempotent 默认 true 全文对齐(快速开始加 spring.redis、能力表、注解属性表、
troubleshooting 加「只有第一条能消费」条目);新增「Redis Stream 消息结构」一节
(五字段信封、enc=plain/gzip、key 逐条唯一契约、rocketmq 端 KEYS 属性补注);
新增 tag 小节(broker 过滤 vs redis-stream 全收)。
CLAUDE.md:装配链路第 2 条改为「默认调用 store、Redis 不可达在消费期暴露」口径。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-14 13:04:08 +01:00 |
|
|
|
0f7be86bb8
|
docs(CLAUDE.md): 2026-07-14 复核对齐——batchSize 软校验决策 + 三处口径补正
- 方法签名约束:记录 batchSize 与首参 List 错配只打 WARN 不阻断(刻意软校验,走不走批量只由首参决定)
- 失败落库口径:单条/批量落库均仅在配了 errorHandler 时发生(safeOnError 对 null handler 静默跳过);MqConsumeErrorHandler 标注可选、未配则任何失败仅 ACK 丢弃
- InProgress 白跑烧重试计数改记为两端共性(rocketmq reconsumeTimes / redis-stream PEL delivery),缓解同构:processing-ttl < maxRetry 轮重投累计时长
- fail-fast 校验补充:仅显式配 mq.type 时介入,缺省落 rocketmq 时三层校验不触发(已知遗留)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-14 04:19:36 +01:00 |
|
|
|
96e26c9bbb
|
docs: README/CLAUDE.md 对齐 rocketmq 消费去重落地——能力表 ❌→✅、新模块 mq-starter-idempotent-redis、mq.idempotent.* 配置、纠正序列化过时表述
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-10 13:18:09 +08:00 |
|
|
|
ae0caafa63
|
docs(mq-starter): 重写 README + 新增 CLAUDE.md,gitignore docs/
- README 重写为面向使用者的完整说明(快速开始/配置项/两 driver 能力对照/架构/TODO)
- 新增 CLAUDE.md:补代码结构、装配链路、消费 ACK 语义等踩坑点,供 Claude Code 参考
- .gitignore 忽略 docs/(AI 生成的本地参考/教学资料,不纳入版本库)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-09 20:41:54 +08:00 |
|