CAP 8.4 版本发布通告
前言
CAP 8.4 正式发布!自 8.3.0 起,我们陆续发布了 5 个小版本,重点围绕性能优化、Dashboard 体验增强、存储提供程序支持完善以及 Bug 修复持续迭代。
下面对这些版本带来的主要改进做一个梳理。
总览
可能还有同学不太熟悉 CAP,先简单介绍一下。
CAP 是一个面向微服务/分布式系统的开源解决方案,用于解决分布式事务问题,也可以作为 EventBus 使用。项目自 2016 年启动,在 Github 上有 6000+ Star、100+ 贡献者,NuGet 下载量超过 1100 万,并在越来越多公司与项目中得到实践应用。
如果你想进一步了解 CAP,请参考 官方文档。
在 8.3.1 到 8.4.0 版本中,主要包含以下改进:
- 消息调度性能与可靠性提升
- Dashboard 操作体验增强
- 存储提供程序支持完善
- 消息传输层优化
- Bug 修复
消息调度性能优化与可靠性提升
背景:在分布式系统中,消息调度与处理是核心环节。随着业务量提升,如何高效、可靠地处理大量延迟消息和队列消息,是一个关键挑战。
SchedulerBatchSize 配置项 (#1689)
8.4.0 新增 SchedulerBatchSize 配置,用于指定每个调度循环中获取的延迟消息/队列消息的最大数量。开发者可以根据硬件资源与业务负载对调度器能力进行更精细的调节,避免单次处理过多消息造成内存压力。
线程安全的消息调度机制 (#1638)
8.3.3 对消息调度机制进行了重构,使其在高并发场景下完全线程安全,解决可能出现的竞态条件问题,提升调度稳定性与数据一致性。同时补充了单元测试,进一步保证质量。
引入 FlushAsync (#1629)
8.3.3 引入 FlushAsync 函数,并在 CommitAsync 中通过 await 调用,确保事务提交时能够正确刷新所有待处理消息,提升持久化可靠性。
MongoDB 锁获取可靠性提升 (#1722)
8.4.0 优化了 MongoDB 锁获取机制,通过减少回滚错误显著提升分布式锁可靠性,特别适合在使用 MongoDB 作为存储、且存在高并发资源竞争的场景。
Dashboard 操作体验增强
背景:Dashboard 是 CAP 的重要组件,提供消息监控与管理能力。随着使用场景丰富,用户对操作便利性也有更高要求。
消息删除功能 (#1674)
8.4.0 Dashboard UI 支持删除单个或多个消息,运维人员在清理异常消息或测试数据时不必再直接操作数据库,从而降低误操作风险。
CAP 消息头处理更稳健 (#1623)
8.3.2 改进了 CAP 消息头的处理方式:当消息头中已存在 CAP 消息组头时,系统会选择覆盖而非抛异常,使迁移与集成过程更平滑。
存储提供程序支持完善
背景:CAP 支持多种数据库作为存储提供程序,不同数据库对优化与兼容有各自需求。
MongoDB 索引优化 (#1702)
8.4.0 更新了 MongoDB 索引策略,新增基于 StatusName 与 ExpiresAt 的复合索引,显著提升查询性能,尤其是在处理过期消息与状态查询时。
达梦数据库支持 (8.3.4)
8.3.4 引入社区贡献的达梦数据库存储提供程序,进一步扩展了数据库支持范围,为使用国产数据库的用户提供更多选择。
数据库表默认索引 (#1599)
从 8.3.1 起,创建数据库表会自动添加默认索引,并调整查询 SQL 以利用这些优化索引,在大规模数据场景下显著提升查询效率(如消息状态查询、过期消息清理等)。
MySQL 过期数据删除优化 (#1673)
8.3.5 修复 MySQL 删除过期数据的语法错误,并优化删除语句执行效率,确保数据清理操作更稳定、更高效。
消息传输层优化
背景:消息传输层是 CAP 连接不同消息系统的桥梁,其稳定性与性能直接影响整体可靠性。
Broker 命名与遥测标准化 (#1717)
8.4.0 标准化了 Broker 命名,并改进了遥测数据收集,使在复杂微服务环境中追踪、诊断问题更容易,增强可观测性。
Kafka 配置保留 (#1686)
8.3.5 改进 Kafka 配置处理逻辑:当用户在 MainConfig 中配置 MessageTimeout 和 RequestTimeout 时,CAP 将不再覆盖这些配置,为开发者留出更灵活的调参空间。
RabbitMQ 客户端升级 (#1645)
8.3.3 将 RabbitMQ.Client 升级到 7.0 版本,受益于新版本的性能与特性提升。
RabbitMQ 队列绑定同步化 (#1670)
8.3.4 将 RabbitMQ 队列绑定从异步调用改为同步阻塞调用,解决某些场景下由于异步调用时序导致的绑定失败问题。
RabbitMQ 消息体安全处理 (#1727)
8.4.0 修复高并发下 RabbitMQ 消息体可能被不安全重用的问题。系统会在后台处理前将消息体复制到专用缓冲区,确保处理过程安全。
Azure Service Bus 改进
8.3.2 修复 Azure Service Bus AutoCompleteMessages 功能导致的无效锁错误 (#1598)。同时,8.3.1 修复了 Azure Service Bus 中 GroupConcurrent 不工作的问题 (#1597),确保消费者组并发处理能力。
Redis Streams 自定义异常处理 (#1618)
8.3.2 为 Redis Streams 引入自定义异常处理支持:当消费 Redis 流发生异常时,可调用用户自定义处理逻辑,增强灵活性。
Bug 修复
除了上述功能改进之外,这一系列版本还修复了多项重要问题:
- Blazor 应用程序挂起问题 (#1697):修复 Blazor 应用在等待提交事务时可能出现的挂起
- 数据库异常处理改进 (#1691):修复延迟消息发送时数据库异常导致线程退出的问题
- 潜在死锁问题 (#1672):修复更新消息状态、删除过期消息时可能出现的死锁
- PostgreSQL 兼容性 (#1643):解决 EFCore 使用 PostgreSQL 且未设置 Persist Security Info = true 时的崩溃
- PostgreSQL 大负载支持 (#1619):修复发送大负载数据时超出 PostgreSQL Include 设计限制导致的索引问题
- RabbitMQ 拒绝函数调用错误 (#1608):修复 RabbitMQ 拒绝功能调用错误
- 密码信息泄露防护 (#1647):消除 RabbitMQ 调试日志中密码配置相关信息,提升安全性
总结
从 8.3.1 到 8.4.0,CAP 在性能、可靠性与用户体验方面都有明显提升:优化消息调度机制、增强 Dashboard 操作能力、完善存储提供程序支持,并修复一系列重要问题。
感谢所有贡献者与用户的支持!特别感谢 @yang-xiaodong、@ustaserdar、@demorgi、@Savorboard、@findersky、@haoyk、@PoteRii、@amimelia、@li-zheng-hao、@MahmoudSamir101 等社区成员的贡献。
使用过程中如果遇到问题,也欢迎积极反馈,帮助 CAP 变得更好。😃
如果你喜欢这个项目,欢迎通过下面的链接点 Star 支持我们。
如果你觉得这篇文章有帮助,感谢你的推荐。
本文地址:http://www.cnblogs.com/savorboard/p/cap-8-4.html
作者博客:Savorboard
本文原创授权为:署名 - 非商业性使用 - 禁止演绎,协议 普通文本 | 协议 法律文本

浙公网安备 33010602011771号