<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>《Java 消息中间件·事件驱动架构》 · 全书目录与章节索引 on PlumePHP</title><link>https://plumephp.com/posts/books/java%E6%B6%88%E6%81%AF%E6%9E%B6%E6%9E%84/</link><description>Recent content in 《Java 消息中间件·事件驱动架构》 · 全书目录与章节索引 on PlumePHP</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Thu, 29 Oct 2026 08:58:00 +0800</lastBuildDate><atom:link href="https://plumephp.com/posts/books/java%E6%B6%88%E6%81%AF%E6%9E%B6%E6%9E%84/index.xml" rel="self" type="application/rss+xml"/><item><title>《Java 消息中间件·事件驱动架构》附录 B 架构决策记录模板</title><link>https://plumephp.com/java-mq-arch-appendix-b-adr-templates/</link><pubDate>Thu, 29 Oct 2026 08:58:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-appendix-b-adr-templates/</guid><description>五份架构决策记录模板覆盖技术选型、事件契约、一致性、迁移与治理场景，每份含背景、选项对比、结论与验证条件。附纯 JDK 实现的 ADR 完整性校验器，确保决策在代码变更前落盘。</description></item><item><title>《Java 消息中间件·事件驱动架构》附录 A 术语表</title><link>https://plumephp.com/java-mq-arch-appendix-a-glossary/</link><pubDate>Thu, 29 Oct 2026 08:57:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-appendix-a-glossary/</guid><description>六十条事件驱动领域术语，覆盖事件基础、Kafka 生态、一致性模型、流处理与治理五个维度，附中英对照、一句话定义与易混词辨析，可作为架构评审的共同语言速查参考。</description></item><item><title>《Java 消息中间件·事件驱动架构》15.3 全书验收</title><link>https://plumephp.com/java-mq-arch-15-3-acceptance-criteria/</link><pubDate>Thu, 29 Oct 2026 08:56:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-15-3-acceptance-criteria/</guid><description>三卷验收汇总不是检查完就结束了，而是明确知道哪些结论仍依赖真实环境验证。本文用纯 JDK 生成卷一到卷三的能力矩阵与遗留风险清单，给出后续演进方向的三阶段实施路线图、量化验收标准、持续改进闭环机制以及验收的投入产出评估。</description></item><item><title>《Java 消息中间件·事件驱动架构》15.2 故障演练剧本</title><link>https://plumephp.com/java-mq-arch-15-2-disaster-recovery/</link><pubDate>Thu, 29 Oct 2026 08:55:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-15-2-disaster-recovery/</guid><description>故障演练的核心不是出了故障再临时应对，而是在系统正常运转时主动模拟各类故障场景并验证恢复能力。本文给出 broker 挂、消费者挂、投影错、契约破坏四个剧本的完整执行步骤、环境要求、回滚方案与检查清单，用纯 JDK 模拟演练自动化检查器与改进工单生成流程。</description></item><item><title>《Java 消息中间件·事件驱动架构》15.1 SLO 与容量</title><link>https://plumephp.com/java-mq-arch-15-1-production-checklist/</link><pubDate>Thu, 29 Oct 2026 08:54:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-15-1-production-checklist/</guid><description>事件链路的 SLO 不是拍脑袋定的承诺，而是基于 SLI 的量化约束与可验证的业务承诺。本文用纯 JDK 模拟延迟分布的 p50、p99、p99.9 计算与新鲜度检测，完整展示容量规划与 SLO 联动的四条规则、过载保护的阈值设计与多维度评审机制。</description></item><item><title>《Java 消息中间件·事件驱动架构》14.3 架构评审清单</title><link>https://plumephp.com/java-mq-arch-14-3-alerting/</link><pubDate>Thu, 29 Oct 2026 08:53:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-14-3-alerting/</guid><description>事件驱动架构正式投产前，二十五条评审问题按契约、一致性、运维与成本四个维度排列，每条附重要性说明与可验证的通过标准。本文给出评审会上逐条过章的检查表流程、自动化判定逻辑、常见驳回案例与完整实施路线图，直接支撑上线验收决策与风险前置措施，避免架构带病上线。</description></item><item><title>《Java 消息中间件·事件驱动架构》12.2 从单体到事件的迁移</title><link>https://plumephp.com/java-mq-arch-12-2-eventual-consistency/</link><pubDate>Thu, 29 Oct 2026 08:51:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-12-2-eventual-consistency/</guid><description>单体迁移到事件驱动的最大风险从来不是技术难度而是回滚能力缺失导致出错后无法体面回退。本文用绞杀者模式拆解迁移四阶段，用纯 JDK 完整模拟双写一致性检测、实际回滚窗口验证与回退演练，确保每步迁移都经过验证的可靠退路方案和明确的回退成本评估。</description></item><item><title>《Java 消息中间件·事件驱动架构》11.3 配额与成本分摊</title><link>https://plumephp.com/java-mq-arch-11-3-compatibility-testing/</link><pubDate>Thu, 29 Oct 2026 08:49:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-11-3-compatibility-testing/</guid><description>在多业务线共享事件平台的场景下，配额超限策略是保障长期稳定运行的生命线。告警阈值必须早于拒绝阈值，给运维团队留出排查根因的时间窗口。本文用纯 JDK 完整模拟按业务线配额管理器，展示硬配额直接拒绝、软配额告警后放行与延迟到下一窗口处理的三种策略。</description></item><item><title>《Java 消息中间件·事件驱动架构》11.2 Topic 命名与生命周期</title><link>https://plumephp.com/java-mq-arch-11-2-version-migration/</link><pubDate>Thu, 29 Oct 2026 08:48:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-11-2-version-migration/</guid><description>Kafka Topic 命名规范与生命周期治理：domain.event.action.vN 格式、CREATING→ACTIVE→DEPRECATED→RETAINED→DELETED 五态机，以及孤儿主题自动清理。Java 模拟命名校验与非法状态转换拦截。</description></item><item><title>《Java 消息中间件·事件驱动架构》11.1 事件平台自助化</title><link>https://plumephp.com/java-mq-arch-11-1-schema-evolution/</link><pubDate>Thu, 29 Oct 2026 08:47:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-11-1-schema-evolution/</guid><description>事件平台自助化的本质不是取消审批，而是把命名违规、权限越级等拒绝条件精准前置到成本最低的节点。本文用纯 JDK 完整模拟工单审批状态机，展示技术初审与安全审计的职责分工、拒绝条件列表与每一步产出物，为共建自助化事件平台提供可落地的流程设计与治理体系。</description></item><item><title>《Java 消息中间件·事件驱动架构》10.3 事件血缘与影响分析</title><link>https://plumephp.com/java-mq-arch-10-3-event-lineage/</link><pubDate>Thu, 29 Oct 2026 08:46:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-10-3-event-lineage/</guid><description>事件血缘必须覆盖字段级而非仅主题级，否则无法精确判断某一个字段被多少个下游消费者消费。本文用纯 JDK、零外部依赖的方式构建最小血缘图，模拟三个生产者、五个主题、八个消费者与十二条血缘边的完整事件拓扑，演示字段级变更后的影响面自动遍历与下游列表生成。</description></item><item><title>《Java 消息中间件·事件驱动架构》10.2 端到端延迟度量</title><link>https://plumephp.com/java-mq-arch-10-2-e2e-latency/</link><pubDate>Thu, 29 Oct 2026 08:45:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-10-2-e2e-latency/</guid><description>端到端延迟必须分段度量而不能依赖均值。本文用纯 JDK、零外部依赖的方式模拟一千条事件跨越生产、Broker、消费与投影四段的延迟分布，输出各段 p50、p99 与端到端总延迟分位值，揭示并发缓冲与流水线重叠使得端到端延迟不等于各段简单相加的根本原因。</description></item><item><title>《Java 消息中间件·事件驱动架构》10.1 事件链路的追踪</title><link>https://plumephp.com/java-mq-arch-10-1-trace-propagation/</link><pubDate>Thu, 29 Oct 2026 08:44:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-10-1-trace-propagation/</guid><description>事件链路追踪的核心在于保证 traceId 跨越 topic 边界时不被截断、不被重置。本文用纯 JDK 模拟 TraceContext 在三条消费者间的头传递，输出 span 树、采样一致性校验与链路断裂点标记，验证消息场景下追踪与同步场景的根本差异。</description></item><item><title>《Java 消息中间件·事件驱动架构》14.2 游戏与 IoT 场景</title><link>https://plumephp.com/java-mq-arch-14-2-monitoring/</link><pubDate>Thu, 29 Oct 2026 08:43:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-14-2-monitoring/</guid><description>游戏与 IoT 场景在事件驱动架构下面临独特挑战：高频小消息、设备离线与乱序到达，与业务事件的强一致性要求完全不同。本文对比游戏状态同步、IoT 批量上报与业务事件在吞吐量、丢失容忍与顺序要求上的差异与独立配置策略，给出可落地的场景选型建议。</description></item><item><title>《Java 消息中间件·事件驱动架构》14.1 库存类场景</title><link>https://plumephp.com/java-mq-arch-14-1-performance-tuning/</link><pubDate>Thu, 29 Oct 2026 08:42:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-14-1-performance-tuning/</guid><description>库存类场景的核心矛盾是超卖、预占与释放的并发控制与幂等保证。本文对比库存扣减、预占锁定与释放通知三种事件链路，用纯 JDK 模拟超卖检测与幂等恢复，展示库存事件顺序与幂等边界在真实并发与高并发环境下的完整设计策略、恢复流程与扩展模式选型选择。</description></item><item><title>《Java 消息中间件·事件驱动架构》13.3 libraryd 事件流</title><link>https://plumephp.com/java-mq-arch-13-3-libraryd-events/</link><pubDate>Thu, 29 Oct 2026 08:41:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-13-3-libraryd-events/</guid><description>libraryd 借阅系统事件流实战：定义 LoanCreated/Renewed/Returned/Overdue 四种领域事件，用内存追加日志模拟 Kafka 分区保序语义，实现投影状态重建、幂等重放验证、按借阅单过滤追踪与事件因果链可视化。</description></item><item><title>《Java 消息中间件·事件驱动架构》13.2 libraryd 命令设计</title><link>https://plumephp.com/java-mq-arch-13-2-libraryd-commands/</link><pubDate>Thu, 29 Oct 2026 08:40:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-13-2-libraryd-commands/</guid><description>libraryd 借阅系统命令设计实战：定义 BorrowBook/ReturnBook/RenewLoan 三种命令类型，验证构造期参数校验、幂等去重、乐观并发版本控制，以及命令被接受或拒绝的显式结果语义与命令到事件的 1:1 映射规则。</description></item><item><title>《Java 消息中间件·事件驱动架构》13.1 libraryd 领域模型</title><link>https://plumephp.com/java-mq-arch-13-1-libraryd-domain/</link><pubDate>Thu, 29 Oct 2026 08:39:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-13-1-libraryd-domain/</guid><description>libraryd 借阅系统核心领域模型实战：纯 JDK 实现聚合根 Loan、实体 Book/Member 与值对象 ISBN/LoanPeriod，验证构造校验、不可变性、相等性、不变量约束与乐观并发版本控制机制，涵盖内存仓储查询与值对象等价性，零 Spring 依赖。</description></item><item><title>《Java 消息中间件·事件驱动架构》12.3 一致性边界</title><link>https://plumephp.com/java-mq-arch-12-3-consistency-boundaries/</link><pubDate>Thu, 29 Oct 2026 08:38:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-12-3-consistency-boundaries/</guid><description>一致性不是全局属性，而是由聚合边界、消费者归属和关键程度共同决定的局部属性。本文给出一张判定表和一段可运行的 H2 代码，按「是否跨聚合消费」「是否关键聚合」两维推导每个聚合的一致性级别，输出明确的 STRONG 与 EVENTUAL 判定报告。</description></item><item><title>《Java 消息中间件·事件驱动架构》12.1 Outbox 模式</title><link>https://plumephp.com/java-mq-arch-12-1-outbox-pattern/</link><pubDate>Thu, 29 Oct 2026 08:36:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-12-1-outbox-pattern/</guid><description>Outbox 模式用数据库本地事务保证业务写入与事件的原子性，再由中继可靠投递到 Kafka。本文用 H2 + kafka-clients 写一段可运行的 outbox 演示，故意构造一条不一致记录，展示对账检测、自动重发、幂等标记与至少一次语义的完整流程与本机实测输出。</description></item><item><title>《Java 消息中间件·事件驱动架构》9.3 事件存储</title><link>https://plumephp.com/java-mq-arch-09-3-event-store/</link><pubDate>Thu, 29 Oct 2026 08:29:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-09-3-event-store/</guid><description>事件存储是事件溯源的基础设施。本节比较自建事件存储与直接使用 Kafka 作为事件存储的权衡，指出 Kafka compacted topic 的局限，并用 Java 实测消费者把事件追加到本地 SQLite 日志表并重放到任意版本的完整流程。</description></item><item><title>《Java 消息中间件·事件驱动架构》9.2 快照与性能</title><link>https://plumephp.com/java-mq-arch-09-2-snapshot/</link><pubDate>Thu, 29 Oct 2026 08:28:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-09-2-snapshot/</guid><description>快照截断事件流以减少重建时的 apply 次数。本节讨论事件数阈值与时间窗口两种快照触发策略、快照与底层事件的版本一致性约束、快照失效时的降级回退方案与多版本保留策略，并用 H2 内存数据库实测 1000 条事件全量重建与快照恢复的性能对比与一致性验证。</description></item><item><title>《Java 消息中间件·事件驱动架构》9.1 事件溯源概述</title><link>https://plumephp.com/java-mq-arch-09-1-event-sourcing-intro/</link><pubDate>Thu, 29 Oct 2026 08:27:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-09-1-event-sourcing-intro/</guid><description>事件溯源把状态变更历史作为唯一数据来源，本节厘清它与 CQRS + 投影的根本区别，给出适用场景、决策代价与三种常见反模式，讨论事件版本管理与外部系统交互策略，并用 H2 内存数据库演示从纯事件流重建聚合的完整过程与实测输出，佐证状态可复现性。</description></item><item><title>《Java 消息中间件·事件驱动架构》8.3 流增强</title><link>https://plumephp.com/java-mq-arch-08-3-stream-enrichment/</link><pubDate>Thu, 29 Oct 2026 08:26:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-08-3-stream-enrichment/</guid><description>Kafka Streams 中 Stream enrichment（增强）的三种方式：join 做参照表 lookup、branch+merge 做条件分流重组、flatMap 做一对多展开。本节真跑 flatMap 增强拓扑，验证 1 条输入产生 2 条输出。</description></item><item><title>《Java 消息中间件·事件驱动架构》8.2 KTable 的 Join</title><link>https://plumephp.com/java-mq-arch-08-2-table-join/</link><pubDate>Thu, 29 Oct 2026 08:25:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-08-2-table-join/</guid><description>KTable-KTable 内连接与外键、KStream-KTable 左外连接的语义差异与常见错误。本机实测 KStream-KTable left join：key 不存在时输出 null 占位，对比 inner join 的数据丢失行为。</description></item><item><title>《Java 消息中间件·事件驱动架构》8.1 表与流的互转</title><link>https://plumephp.com/java-mq-arch-08-1-stream-table-duality/</link><pubDate>Thu, 29 Oct 2026 08:24:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-08-1-stream-table-duality/</guid><description>Kafka Streams 中 KStream（无界增量事件流）与 KTable（有界快照）的本质差异：同一个 topic 用不同算子消费，输出完全不同。本节真跑「stream -&gt; table -&gt; stream」拓扑，展示中间状态与最终输出。</description></item><item><title>《Java 消息中间件·事件驱动架构》7.3 窗口与聚合</title><link>https://plumephp.com/java-mq-arch-07-3-window-aggregation/</link><pubDate>Thu, 29 Oct 2026 08:23:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-07-3-window-aggregation/</guid><description>Kafka Streams 的窗口操作是时间维度聚合的核心。本节通过编译运行 TimeWindowedKStream 拓扑，展示滚动窗口、跳跃窗口和会话窗口三种类型的边界行为与输出差异，讨论窗口大小与 topic retention 的耦合关系，并给出迟到数据的处理策略与性能影响分析。</description></item><item><title>《Java 消息中间件·事件驱动架构》7.2 状态存储</title><link>https://plumephp.com/java-mq-arch-07-2-state-store/</link><pubDate>Thu, 29 Oct 2026 08:22:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-07-2-state-store/</guid><description>Kafka Streams 的状态存储是本地 RocksDB 实例，与 changelog topic 配合实现故障恢复。本节通过编译运行带状态存储的拓扑，观察 state.dir 目录下的文件结构与大小，对比 KeyValueStore、WindowStore 和 SessionStore 三种类型，并给出状态丢失的重建策略与监控指标。</description></item><item><title>《Java 消息中间件·事件驱动架构》7.1 Streams 的拓扑与处理器</title><link>https://plumephp.com/java-mq-arch-07-1-topology-processor/</link><pubDate>Thu, 29 Oct 2026 08:21:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-07-1-topology-processor/</guid><description>Kafka Streams 的拓扑模型是事件驱动系统的计算引擎。本节通过编译运行真实拓扑获取 Topology.describe() 输出，逐行解析 Source、Processor、Sink 三节点模型，展示有状态处理器的本地 RocksDB 存储结构与 changelog topic 自动创建机制，提供诊断命令与监控指标对照表。</description></item><item><title>《Java 消息中间件·事件驱动架构》6.3 消费者驱动的契约</title><link>https://plumephp.com/java-mq-arch-06-3-consumer-driven-contract/</link><pubDate>Thu, 29 Oct 2026 08:20:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-06-3-consumer-driven-contract/</guid><description>消费者契约不是生产者的单元测试，而是消费者声明「我依赖这些字段」，再由 CI 验证生产者是否遵守。本文用纯 Java 实现契约断言，完整展示「生产者改了字段，测试红了」的四场景输出，并给出一个可嵌入 Maven verify 阶段的契约测试骨架。</description></item><item><title>《Java 消息中间件·事件驱动架构》6.2 兼容性与 Schema 管理</title><link>https://plumephp.com/java-mq-arch-06-2-compat-and-schema/</link><pubDate>Thu, 29 Oct 2026 08:19:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-06-2-compat-and-schema/</guid><description>Schema Registry 不是架构演进的银弹。本文讨论 Registry 的适用边界与三条限制，给出两种无 Registry 的替代方案——消息体内嵌版本信封与代码内版本路由表，并用 Jackson 实测新旧双版本并存解析，展示默认值的回填逻辑。</description></item><item><title>《Java 消息中间件·事件驱动架构》6.1 事件版本化</title><link>https://plumephp.com/java-mq-arch-06-1-event-versioning/</link><pubDate>Thu, 29 Oct 2026 08:18:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-06-1-event-versioning/</guid><description>事件版本号放在主题名、消息信封还是字段里，每种方案在落盘、回放与消费端的成本各不相同。本文用 Java 实测三种版本化方案的兼容性判定逻辑，覆盖加字段、删字段、改名三类变更，按 FORWARD/BACKWARD/FULL 给出可复用的判定表。</description></item><item><title>《Java 消息中间件·事件驱动架构》5.3 并发控制与版本</title><link>https://plumephp.com/java-mq-arch-05-3-versioning-concurrency/</link><pubDate>Thu, 29 Oct 2026 08:17:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-05-3-versioning-concurrency/</guid><description>乐观并发控制通过版本号解决多写者冲突。本节给出 CAS 风格版本号检查的可运行 Java 代码，模拟两个消费者同时写同一聚合根时的检测与重试流程，对比乐观锁与悲观锁的适用边界，包含重试退避策略、libraryd 并发修改场景与生产者幂等联动机制的深度分析。</description></item><item><title>《Java 消息中间件·事件驱动架构》5.2 幂等边界的设计</title><link>https://plumephp.com/java-mq-arch-05-2-idempotence-boundary/</link><pubDate>Thu, 29 Oct 2026 08:16:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-05-2-idempotence-boundary/</guid><description>幂等不是全局属性，而是应用层边界函数。本节深入讨论业务键、消息 ID、自然键三种幂等方案，给出可运行的对照判定代码，演练重平衡导致消息重发时的幂等防护机制，对比生产者幂等与消费者幂等的分界，附带去重表存储成本估算、排查清单与一致性注意事项。</description></item><item><title>《Java 消息中间件·事件驱动架构》5.1 事件顺序与业务顺序</title><link>https://plumephp.com/java-mq-arch-05-1-business-ordering/</link><pubDate>Thu, 29 Oct 2026 08:15:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-05-1-business-ordering/</guid><description>Kafka 分区有序不等于业务有序也不等于因果有序。本机实验模拟乱序到达（COMPLETE→INIT→PAIR），对比时间戳排序与版本号排序两组策略，证明业务因果序必须由事件体自身携带单调版本号维护，时间戳因生产者时钟偏移与发送时序而不可信。</description></item><item><title>《Java 消息中间件·事件驱动架构》4.3 补偿与最终一致性</title><link>https://plumephp.com/java-mq-arch-04-3-compensation/</link><pubDate>Thu, 29 Oct 2026 08:14:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-04-3-compensation/</guid><description>「最终一致」里的「最终」必须是一个可度量的分布，不是一句安慰。本文给出一致性窗口的度量代码：事件产生时打时间戳，下游写库提交后再打一个，按分位统计。本机两段负载实测显示窗口随积压线性增长，慢消费者下 p99 从 81ms 变成 4387ms。据此讨论补偿的触发条件、补偿失败的人工出口，以及一致性窗口该怎么承诺。</description></item><item><title>《Java 消息中间件·事件驱动架构》4.2 本地消息表与对账</title><link>https://plumephp.com/java-mq-arch-04-2-outbox-reconcile/</link><pubDate>Thu, 29 Oct 2026 08:13:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-04-2-outbox-reconcile/</guid><description>卷二讲过 outbox 这个模式，这一节讲它落地要写哪几张表、中继怎么保证至少一次、对账为什么必须三方比对。用 H2 内存库真跑一遍：六个借阅、四类差异（有库无事件、有事件无库、写侧内容不一致、读侧内容不一致），输出差异报告，再演示读模型重建能修复哪一类、修不了哪一类。</description></item><item><title>《Java 消息中间件·事件驱动架构》4.1 分布式事务的三种落地</title><link>https://plumephp.com/java-mq-arch-04-1-distributed-tx/</link><pubDate>Thu, 29 Oct 2026 08:12:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-04-1-distributed-tx/</guid><description>跨服务之后「事务」这个词只剩下一半含义。本文把 2PC、TCC、最终一致三种落地拆开：各自要求什么前提、把不确定性放在哪里、失败时留下什么残局，并用一张四维对照表（一致性强度、可用性、实现成本、失败模式）说明为什么大多数业务最终选了第三种，以及哪两类场景不该选它。</description></item><item><title>《Java 消息中间件·事件驱动架构》3.3 模型重建与重放</title><link>https://plumephp.com/java-mq-arch-03-3-rebuild-replay/</link><pubDate>Thu, 29 Oct 2026 08:11:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-03-3-rebuild-replay/</guid><description>投影表是可丢弃的派生视图。本节真跑一次完整重建实验：先投影 20 条库存事件，清空表后从位移 0 重放重建并对比两次耗时与一致性，验证事件日志作为唯一事实来源的可复现性，深入讨论重建触发条件、快照优化策略、业务低峰期执行建议与常见注意事项。</description></item><item><title>《Java 消息中间件·事件驱动架构》3.2 投影与视图构建</title><link>https://plumephp.com/java-mq-arch-03-2-projection/</link><pubDate>Thu, 29 Oct 2026 08:10:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-03-2-projection/</guid><description>投影是从事件流到读模型的单向转换。本节用 H2 内存表做投影目标，实测 Kafka 消费者消费事件进投影表的全过程，展示幂等写入、顺序处理、查询验证与错误恢复策略，并对比关系型数据库、Redis、Elasticsearch 等多种存储后端。</description></item><item><title>《Java 消息中间件·事件驱动架构》3.1 CQRS 基础</title><link>https://plumephp.com/java-mq-arch-03-1-cqrs-basics/</link><pubDate>Thu, 29 Oct 2026 08:09:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-03-1-cqrs-basics/</guid><description>CQRS 通过命令与读取分离化解读写冲突。本节用 H2 内存数据库演示命令写入、事件生成与投影更新的完整分离流程，给出可运行的 Java 代码示例，深入对比同步双写与异步事件总线两种同步策略，并提供典型应用场景、反模式警示与事件日志操作日志的区别分析。</description></item><item><title>《Java 消息中间件·事件驱动架构》2.3 事件目录与契约</title><link>https://plumephp.com/java-mq-arch-02-3-event-catalog/</link><pubDate>Thu, 29 Oct 2026 08:08:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-02-3-event-catalog/</guid><description>事件目录不是文档，是可执行的契约。本节给出 libraryd 的 events.yaml 全量示例，逐字段说明 name、topic、version、owner、key、schema、consumers、compat 各自约束什么；再把目录与 Java record 做双向漂移检查，实测抓出一次字段改名和两个未登记字段，修复后 224 项检查全绿。</description></item><item><title>《Java 消息中间件·事件驱动架构》2.2 事件边界与聚合</title><link>https://plumephp.com/java-mq-arch-02-2-boundary-aggregate/</link><pubDate>Thu, 29 Oct 2026 08:07:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-02-2-boundary-aggregate/</guid><description>事件粒度由聚合根决定，不由表结构决定。本节用 libraryd 的借阅流程画出 Loan、Book、Hold 三个聚合的边界，说明一个事务只改一个聚合、一次状态迁移只发一条事件、跨聚合用事件而不是共享表；并用共享表建模的对照实验给出 3 条事件、19 个字段、四轮级联 120 条的结构比例。</description></item><item><title>《Java 消息中间件·事件驱动架构》2.1 领域事件识别</title><link>https://plumephp.com/java-mq-arch-02-1-domain-event-discovery/</link><pubDate>Thu, 29 Oct 2026 08:06:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-02-1-domain-event-discovery/</guid><description>事件不是表变更的别名。本节用 libraryd 的六个业务动作演示识别过程：先把动作、状态迁移与表写入分开列，再从迁移里提取过去时事实，最后用确定性 lint 挡掉 UpdateBookStatus、BookRowUpdated 这类伪事件，给出六个事件的命名对照与 12 个候选名的实测判定。</description></item><item><title>《Java 消息中间件·事件驱动架构》1.3 事件驱动成熟度模型</title><link>https://plumephp.com/java-mq-arch-01-3-maturity-model/</link><pubDate>Thu, 29 Oct 2026 08:05:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-01-3-maturity-model/</guid><description>把事件驱动分成五级：消息传递、领域事件、契约治理、流处理、事件溯源。逐级说明能力、代价与常见误判，给出一份 20 题、按 0/1/2 打分的自评表，并用可运行程序算出 libraryd 当前处在第 2 级、升到第 3 级还差哪两项，最后给出升级动作与不该升级的理由。</description></item><item><title>《Java 消息中间件·事件驱动架构》1.2 事件驱动 vs 请求驱动</title><link>https://plumephp.com/java-mq-arch-01-2-event-vs-request/</link><pubDate>Thu, 29 Oct 2026 08:04:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-01-2-event-vs-request/</guid><description>事件驱动不是默认答案。先用四个信号判断什么时候该用事件，再用一张决策树把请求驱动、命令、查询、事件分开；接着用 libraryd 的两个反例说明用错位置的代价：借书前异步查库存导致超卖，借完立刻查列表却读不到。文末附串行调用与扇出的对照实验，并说明延迟收益为何不是主要理由。</description></item><item><title>《Java 消息中间件·事件驱动架构》1.1 事件、命令与查询</title><link>https://plumephp.com/java-mq-arch-01-1-event-command-query/</link><pubDate>Thu, 29 Oct 2026 08:03:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-01-1-event-command-query/</guid><description>从 libraryd 的借阅动作出发，把事件、命令、查询当成三种不同的句子：过去时的事实、祈使的请求、只读的提问。用三个 Java record 和一组可运行的进程内总线实验，展示多播与单接收的差别，并演示命令被广播、事件被点对点投递之后各自坏在哪里。</description></item><item><title>《Java 消息中间件·事件驱动架构》目录与学习路径</title><link>https://plumephp.com/java-mq-arch-toc/</link><pubDate>Thu, 29 Oct 2026 08:02:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-toc/</guid><description>卷三全 50 篇的完整目录：五部分、15 章、45 节，加序、前言与两个附录。每章标注它回答的那个架构问题，并给出三条阅读路径——架构师、开发、评审——以及哪些章节可以跳读、哪些必须配着代码看、每节末尾那条判据在评审时该怎么用，还给出三种路径之外的极简读法。</description></item><item><title>《Java 消息中间件·事件驱动架构》前言：实验环境、Kafka Streams 与案例口径</title><link>https://plumephp.com/java-mq-arch-preface/</link><pubDate>Thu, 29 Oct 2026 08:01:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-preface/</guid><description>把这一卷的实验底座写清楚：机器与工具链、Kafka Streams 的最小可运行验证、三个必须自己补的依赖，以及 libraryd-mq 的工程结构与架构图的画法约定。最后说明本卷的验证规矩——什么样的内容算实测，什么情况下必须标注未在本机执行。</description></item><item><title>《Java 消息中间件·事件驱动架构》序：别把消息队列当 RPC</title><link>https://plumephp.com/java-mq-arch-foreword/</link><pubDate>Thu, 29 Oct 2026 08:00:00 +0800</pubDate><guid>https://plumephp.com/java-mq-arch-foreword/</guid><description>把消息队列当成更可靠的 HTTP，是事件驱动架构最常见也最贵的误用。本序拆开三种典型误用——用 MQ 做同步调用、削峰却不管积压、用事件掩盖领域边界——说明它们各自的失效方式与代价，给出本卷的五条立场和五个自检问题：事件是事实的记录，不是调用的替代品。</description></item></channel></rss>