Commit Graph

17 Commits

Author SHA1 Message Date
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
2bcce78763 docs: README 已知限制补 trim 默认开启的升级醒目提示
配置表行内 ⚠️ 之外,在已知限制一节开头再立一条:升级后订阅 stream 按
trim.maxlen 封顶、堆积超限删最老未消费消息,附调大/关闭与容量估算指引。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 11:59:43 +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
f9bbc0721c docs: tag 小节补「同 group 订阅必须一致」硬规则(终审 Important 修复)
同组配不同 tag 会互相 ACK 吞掉对方消息(静默丢),README 此前只示范
按 tag 分流却未写分流必须各用各的 group;rocketmq 生态同款规则
(订阅关系不一致),两端皆然。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 14:02:04 +08: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
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
14502449aa docs(README): 承接全景手册上手教学——手册删教学 tab 后 README 成为唯一上手入口
- 发送语义:fastjson 序列化约束(无参构造+getter/setter)、send 同步/失败抛异常、反序列化失败两端行为(redis-stream ACK 丢弃/rocketmq 重试到耗尽)
- 批量的坑:裸 List 启动报错、无 idle flush、整批失败被吞须配 errorHandler、可加 MqContext 第二参
- 新增「排错 FAQ」章节(8 问,自手册 FAQ 改写)
- 配置表小补:fail-ttl 语义、redis-stream.* 底层配置来源
- 架构章节指向手册的描述改为架构图文/能力矩阵/Roadmap(配置速查与 FAQ 不再在手册)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 11:14:30 +08:00
5191f5ace9 docs(README): batchSize 能力格对齐全景手册——两端一致(core 内存攒批/no idle flush/重启丢未满批),纠正 redis 侧 伪差异
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 15:33:53 +08:00
3c14b0cca3 docs(README): SINGLE 失败落库口径对齐全景手册——两端一致(单条落库+重投/批量失败被吞),纠正 rocketmq 记错的 RECONSUME_LATER 伪差异
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 15:12:02 +08: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
69db3fdd01 chore: 初始化 mq-starter 仓库(.gitignore + README)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 21:14:37 +08:00