CAP 8.4 版本发布通告

前言

今天,我们很高兴宣布 CAP 发布 8.4 版本正式版。从 8.3.0 版本以来,我们陆续发布了 5 个小版本,在这些版本中我们主要专注于提升系统性能、增强 Dashboard 功能、改进存储提供程序支持,并修复了一系列已知问题。

下面,让我们具体看一下这些版本带来的新特性和改进。

总览

可能有些人还不知道 CAP 是什么,老规矩来一个简介。

CAP 是一个用来解决微服务或者分布式系统中分布式事务问题的一个开源项目解决方案(https://github.com/dotnetcore/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 版本迎来了社区贡献的 达梦 数据库存储提供程序。这扩大了 CAP 的数据库支持范围,为使用国产数据库的用户提供了更多选择。

数据库表默认索引 (#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 将不再覆盖这些配置。这给予了开发者更大的灵活性,能够根据具体业务需求调整 Kafka 客户端行为。

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 版本中修复了 GroupConcurrent 在 Azure Service Bus 中不工作的问题 (#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 给我们支持。

GitHub stars

如果你觉得本篇文章对您有帮助的话,感谢您的【推荐】。


本文地址:http://www.cnblogs.com/savorboard/p/cap-8-4.html
作者博客:Savorboard
本文原创授权为:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923311.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

免费名片在线设计网站小程序外包公司发展前景

目前开发命名规范基本都遵循驼峰命名法,如:userName。我也不将这个规范的特性了,大家都明白。接下来进入正题,如何在python中取一个好名字,让你能更好的见名知意呢?1.元组(Tuple)类型变量命名在python中Tup…

【Leetcode】随笔 - 详解

【Leetcode】随笔 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…

STM32 智能垃圾桶项目笔记(一):超声波模块(HC-SR04)原理与驱动实现 - 教程

STM32 智能垃圾桶项目笔记(一):超声波模块(HC-SR04)原理与驱动实现 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-f…

DevEco Studio 编辑器的使用 - 实践

DevEco Studio 编辑器的使用 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

docker安装MySQL8.0.25的坑

一、搜索拉取镜像 docker search mysql docker pull mysql #不写版本号 默认拉取最新版本 docker pull mysql:8.0.25 #写版本号,则拉取确定的版本二、查看镜像 docker images三、启动镜像 docker run -d --name mysql…

Powershell维护系统管理任务(五)

Powershell维护系统管理任务目录维护系统管理任务管理 AD 域服务管理组和组成员身份管理组创建新组管理组成员身份管理计算机帐户新建计算机帐户修复计算机账户的信任关系账户与设备管理cmdlet的区别管理组织单位和 AD…

百度的网站名山东省建设项目监理协会网站

前言: pad 是每个 element实例 都有的,是 elemenet 之间沟通的代理人,没有 pad 的 element 没法于其他element交流。 考虑到gstreamer存在继承体系,那么如果继承类element不在init函数里创建pad,那么在gst_element_l…

软件测试工程师面试刷题:简单JAVA算法题以及解法

软件测试工程师面试刷题:简单JAVA算法题以及解法找不同给定两个字符串 s 和 t ,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。示例 1: 输入:s =…

济南专业的设计网站免费网站建设 百度收录

NVIDIA Corporation 在 GitHub 的官方主页 References https://github.com/NVIDIA References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

蚌埠做网站有哪些公司买个域名

本文主要向大家详细介绍了jQuery的绑定事件和移除事件的使用方法和示例分享,这里推荐给有需要的小伙伴们参考下。有时候事件执行完了,想取消事件的效果可以通过一定的办法来处理。比如bind()(绑定事件)和unbind()(移除通过bind()方法添加的事件)方法来移…

巩义网站建设价格天津滨海新区落户政策

前言 这是我在这个网站整理的笔记,关注我,接下来还会持续更新。 作者:RodmaChen PostgreSQL--实现数据库备份恢复详细教学 一. 数据库备份二. 数据库恢复三. 存留问题 数据库备份恢复功能是每个产品所需的,以下是简单的脚本案例&a…

实用指南:React基础到进阶

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

如何做营销型手机网站优化做网站招聘的职业顾问

关于DRL的WTI模块: Weighted Token-wise Interaction: 直觉上,并非所有的单词和视频帧都同等重要。我们提供一种自适应方法,来调整每个标记的权重大小: 注:其中两个f函数都是MLP和softmax构成。 WTI的算…

九龙坡网站建设哪家好宝塔 wordpress 教程

在使用M1 在安装cocopods 前时,安装 rvm install 3.0.0遇到 rvm install 3.0.0 Error running __rvm_make -j8 备注: 该图片是借用其他博客图片,因为我的环境解决完没有保留之前错误信息。 解决方法如下: 1. brew uninstall --ignore-depe…

网站上内容列表怎么做的网站开发为什么要用框架

概述分享下最近做的一个mysql大表归档方案,仅供参考。整体思路一、明确哪些大表需做归档1、数据库表概要信息统计SELECTt1.table_schema,t1.table_name,ENGINE,table_rows,CAST( data_length / 1024.0 / 1024.0 AS DECIMAL ( 10, 2 ) ) data_size(M),CAST( index_le…

bat批处理设置临时PATH路径不能访问

前言全局说明一、说明 1.1 环境: Windows 7 旗舰版二、通常设置路径方法 set adb_PATH=d:\adb_dir set PATH=%PATH%;%adb_PATH%直接在命令行里这么写没问题 在bat脚本中,会提示找不到路径下命令三、解决方法 使用环境…

电子商务网站开发工具网站营销外包公司简介

来源:博客丨政策管理作者:贺飞(北京大学)摘要:量子计算:前途光明 道路曲折量子计算:前途光明 道路曲折(一)本周,美国国家科学院、工程院和医学院的一个由13…

2025-2026-1 20231301 《信息安全设计》第九周学习总结

View Post2025-2026-1 20231301 《信息安全设计》第九周学习总结2025-2026-1 20231301 《信息安全设计》第九周学习总结 目录作业信息学习内容总结1. 进程的本质2. 系统调用层次结构3. 进程创建与执行完整流程exec() 函…

手机网站锁定竖屏看代码建设部网站水利设计资质

合作官宣 TopOn 正式成为亚太地区首家支持自动创建Admob bidding广告源的聚合平台。目前,在TopOn后台添加Admob广告平台,您只需要重新授权Google账号,即可开通自动创建功能。此前,TopOn 已在24年2月6日官方聚合支持Google biddin…