docs: 批量攒批两端对齐后的能力表述收尾(上轮遗留工作区改动)

README 能力表批量行 ⚠️、引言补「含 idle flush」;CLAUDE.md 差异段
同步「整批失败为剩余差距、concurrency 唯一未兑现」口径。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-16 11:50:14 +08:00
parent ffa30a7631
commit 1f29c71dba
2 changed files with 3 additions and 3 deletions

View File

@@ -37,7 +37,7 @@ mq-starter-rocketmq RocketMQ driver收发 + 原生重试/死信 + RET
mq-spring-boot-starter 聚合 jar业务方只引这一个恒含 idempotent-redis
```
> ⚠️ **两个 driver 仍有差异**README 有对照表去重、失败落库两端已对齐2026-07 起 rocketmq `idempotent=true` 生效,需 Redis 可达剩余差距是死信模型redis 只落库 / rocketmq 原生 `%DLQ%`批量攒批语义、`concurrency` 两端都未兑现。改跨 driver 行为前先对照 README 能力表。
> ⚠️ **两个 driver 仍有差异**README 有对照表去重、失败落库两端已对齐2026-07 起 rocketmq `idempotent=true` 生效,需 Redis 可达剩余差距是死信模型redis 只落库 / rocketmq 原生 `%DLQ%`批量**整批失败**的处理(逐条 ACK 后无法精确重投整批,故落库+吞掉);真正两端都未兑现的只有 `concurrency`。批量攒批本身(含 idle flush 超时/停机强刷2026-07 已落地)两端已对齐。改跨 driver 行为前先对照 README 能力表。
>
> **单独只引 `mq-starter-rocketmq`(不走聚合坐标)时去重需自行加 `mq-starter-idempotent-redis` 依赖**——rocketmq 模块本身不依赖它(刻意零耦合)。

View File

@@ -172,7 +172,7 @@ public class MyErrorHandler implements MqConsumeErrorHandler {
## 两个 driver 不太一样
两套实现的能力大头已经对齐:去重、失败落库两端都接上了。剩下的差异主要在死信模型和批量语义
两套实现的能力大头已经对齐:去重、失败落库、批量攒批(含 idle flush两端都接上了。剩下的差异主要在死信模型以及批量的**整批失败处理**(攒批本身两端已对齐,糙点在整批失败被吞、无法精确重投)
| 能力 | Redis Stream | RocketMQ |
|---|:---:|:---:|
@@ -181,7 +181,7 @@ public class MyErrorHandler implements MqConsumeErrorHandler {
| 去重 `idempotent`(默认开启) | ✅(需 Redis | ✅(需 Redis |
| 失败落库 `RETRY_EXHAUSTED`(需配 `errorHandler`,否则仅 ACK 丢弃) | ✅ | ✅ 落库+ACK |
| 失败落库 `SINGLE` | ⚠️ 单条:落库+重投;批量:失败被吞(两端一致) | ⚠️ 单条:落库+重投;批量:失败被吞(两端一致) |
| 批量 `batchSize` | ⚠️ core 内存攒批driver 逐条喂);超时/停机强制刷出,仅 kill -9 丢未满批(两端一致) | ⚠️ core 内存攒批driver 逐条喂);超时/停机强制刷出,仅 kill -9 丢未满批(两端一致) |
| 批量 `batchSize` | core 内存攒批driver 逐条喂);超时/停机强制刷出,仅 kill -9 丢未满批(两端一致) | core 内存攒批driver 逐条喂);超时/停机强制刷出,仅 kill -9 丢未满批(两端一致) |
| 重试 | ✅ PEL reclaim | ✅ 原生重投 |
| 死信队列 | ❌ 只落库 | ⚠️ 原生 `%DLQ%` 通常被耗尽 ACK 旁路InProgress 白跑烧光计数时仍会进) |
| 顺序消息 | ❌ | ❌ 用的 Concurrently |