SuperAPI AI 工具集

event-driven-messaging

编程与开发

查看项目

更新于 10-16 02:41

技能介绍

用途

该技能用于在 Spring Boot 3 中实现 Kafka、RabbitMQ、Pulsar 或 JMS 的生产者与消费者时,提供事件驱动消息的设计与实现指导。其核心立场是:除非完整系统能够证明更强的投递语义,否则应按至少一次(at-least-once)投递进行设计。

主要能力

事件契约

  • 使用不可变的事件信封,包含 eventId、eventType、occurredAt、schemaVersion 和 payload。
  • 将已发布的 schema 视为 API:以兼容方式新增字段,绝不静默改变字段含义。
  • 将 correlation 与 causation ID 放入消息头或信封中。
  • 不要发布 JPA 实体或框架特定的序列化结构。

生产者规则

  • 仅在原始状态变更持久化之后再发布事件。
  • 当数据库状态与消息代理发布必须保持一致时,使用事务性发件箱(transactional outbox)。
  • 当需要按聚合保证顺序时,使用确定性的分区键。
  • 显式配置投递超时与确认机制。

消费者规则

  • 通过持久化的已处理事件记录或天然幂等的写入,使处理器具备幂等性。
  • 将事务边界围绕状态变更与幂等标记。
  • 在配置重试之前,先区分瞬时失败与永久失败。
  • 使用退避策略限制重试次数,之后将毒消息路由到死信目的地。
  • 保留原始事件、失败原因与尝试次数,以便重放。

测试

  • 测试序列化兼容性与处理器幂等性。
  • 使用 Testcontainers 进行消息代理集成测试。
  • 测试重复、乱序、延迟和毒消息场景。

使用方式

该技能以规则与检查清单的形式给出设计约束,并附带示例文件:examples/good-consumer.java 与 examples/bad-consumer.java,用于对照正确与错误的消费者实现。具体安装命令与调用方式暂未提供。

适用场景

适用于在 Spring Boot 3 项目中集成 Kafka、RabbitMQ、Pulsar 或 JMS,需要设计事件契约、生产者发布逻辑、消费者幂等与重试策略、死信处理以及相关测试的开发者。

限制与注意事项

技能中列出的常见陷阱包括:

  • 因消息代理支持事务就假设端到端恰好一次投递——端到端的副作用仍需幂等性。
  • 对校验失败进行无限重试——应尽快将永久失败送入死信。
  • 在数据库事务内直接发布事件而不使用发件箱——崩溃可能导致状态与事件投递不一致。
  • 使用随机分区键——会丢失单个聚合的顺序。
  • 直接反序列化为 JPA 实体——应使用带版本的事件契约。

关于该技能的具体收费、价格、支持平台、实际效果或完整使用步骤,资料中暂未提供。