CAP 8.0 版本发布通告 - CAP 7岁生日快乐!
前言
今天,我们很高兴宣布 CAP 发布 8.0 版本正式版,从 2016 年 12 月 14 日CAP立项到 2023 年 12 月14 日发布 8.0 版本刚好满 7 年,祝 CAP 7 岁生日快乐,巧的是这一天也是我生日,真是意想不到啊!
那就做一个 Overview 吧,在这7年间,我们一共发布了 61 个版本,在 Github 上有 6.3K 的 Star,有 108 个贡献者以及 DotNetCore.CAP 核心包在 NuGet 上有 640 万的下载量。这个数据讲道理说作为一个非基础库组件来说真的还不错,不知道你怎么看。
还没有 Star 的朋友如果你能访问 Github,动手点个 Star 是对7年来我们最大的支持,一件事情坚持7年真的不容易。如果你不能访问Github,可以在评论区回复 “ 祝CAP 7岁生日快乐! ” 表示支持。
如果你想在你的公司讲解分布式事务或引入CAP 给同事做介绍,可以使用2周前我在 .NET Conf 2023 成都会场分享的分布式事务的PPT,这是pptx版本没有版权,你可以随意进行更改使用。
总览
我们宣布 CAP 发布 8.0 版本正式版,这个版本我们一方面是对.NET 8 的支持,另外一方面主要是对 Dashboard 的认证授权方式做了大的调整,另外我们也修复了一些BUG。
从 7.2 版本以来,我们发布了2个小版本,因为小版本我们不会有发布通告,所以这篇文章中也会提及我们在之前的这些小版本中加的一些小功能。
下面,具体看一下我们新版本的功能吧。
在我们构建 SOA 或者 微服务 系统的过程中,会遇到分布式系统下事务一致性的问题,我们通常需要使用事件来对各个服务进行集成,在这过程中简单的使用消息队列并不能保证数据的安全性,CAP作为一个分布式事务解决方案采用的是和当前数据库集成的本地消息表的方案来解决在各个服务通讯环节可能出现的异常,它能够保证任何情况下数据都是不会丢失的,同样可以用来作为 EventBus 使用,它轻量简单易于使用。
对 CAP 更多了解,请查看我们的 官方文档。
本次在 CAP 8.0 版本中我们主要带来了以下改进或新特性:
- 对.NET 8 的全面支持
- 添加 FallbackWindowLookbackSeconds 配置项以支持自定义回溯时间窗。
- 改进 EnableConsumerPrefetch 和 UseDispatchingPerGroup 配置项以共同工作。
- DotNetCore.CAP.NATS 支持配置 DeliverPolicy,默认为 New。
- 破坏性改动
- 在 DotNetCore.CAP.Dashboard 中移除
DefaultAuthenticationScheme、UseChallengeOnAuth、DefaultChallengeScheme和AuthorizationPolicy配置项。
- 在 DotNetCore.CAP.Dashboard 中移除
- BUG 修复
- 修复消息无限重试的问题(PR #1456 - 感谢 @bschwehn):这一修复解决了订阅者移除后消息重试机制的问题。
- 修复 Open Telemetry 上下文丢失(PR #1452 - 同样感谢 @bschwehn):这个修复确保了在消费者重试和Baggage传播过程中上下文的完整性。
- 修复 NATS 连接重连处理问题(PR #1449 - 感谢 @davidterins)。
- 修复 DotNetCore.CAP.InMemoryStorage 发件箱模式消息恢复问题(PR #1439 - 同样感谢 @davidterins)。
- 修复 Azure Service Bus 事件处理程序的双重注册问题(PR #1427 - 同样感谢 @demorgi)。
- 修复 SQL Server 事务中发布延迟消息的问题(PR #1422 - 感谢 @xiangxiren。
全面支持 .NET 8
在这个版本中,我们添加了新的 .NET 8 版本框架,同时我们对于 .NET 6 保持了兼容性,在 NuGet的依赖项中将同时显示 net6.0 和 net8.0,如下图:

在 .NET 8 中依赖注入引入了 KeyedService,在这个版本中我们进行了支持,你的订阅方法现在可以位于 KeyedService 中,如果使用的旧版本在过去则会引发异常。
支持自定义回溯时间窗
添加 FallbackWindowLookbackSeconds 配置项以支持自定义回溯时间窗。
在过去,我们在重试时会从数据库中获取4分钟前存储的消息,这一设定是为了保证新加入的消息不会被获取到从而避免重复发送或消费的问题,现在这个值可以进行配置。但是如果这个值配置太小则可能会带来副作用,所以我们在启动时如果检测到配置的值小于30秒则会打印警告日志进行提醒。
适用的场景:如果你的系统在某个时间点才会一次性发送大量消息,并且这些消息不能在4分钟内处理完成,那么可以将此配置值调大以保证消息尽可能不重复。
EnableConsumerPrefetch,UseDispatchingPerGroup 同时工作
在 7.2.0 版中,我们将 UseDispatchingPerGroup 选项标记为 [Obsolete],并计划在未来的版本中删除它,并打算将其功能替换为 EnableConsumerPrefetch 选项。但是,根据用户反馈,UseDispatchingPerGroup 有自己独特的使用场景。因此,在 7.2.1 版本中,我们将继续支持 UseDispatchingPerGroup 选项,并且 EnableConsumerPrefetch 也将同时生效。
下图描述了这两个配置项不同的组合下,消费者任务的执行方式。

NATS 支持配置 DeliverPolicy,默认为 New
NATS 现在支持对 Stream 的 DeliverPolicy 参数进行自定义,可选项有 DeliverAll, DeliverLast, DeliverNew, DeliverByStartSequence, DeliverByStartTime, or DeliverLastPerSubject,默认为 DeliverPolicy.New。
另外,NATS 出了一个新的 V2 版本的 .NET 驱动,我们有计划迁移到新的版本,如果有人愿意贡献请联系我或提交PR。
破坏性改动
在 DotNetCore.CAP.Dashboard 中移除 DefaultAuthenticationScheme、UseChallengeOnAuth、DefaultChallengeScheme 和 AuthorizationPolicy 配置项。
现在将基于于 ASP.NET Core 的认证和授权中间件来工作,你可以在 Repo 的 Sample.Dashboard.Auth 示例项目下查看如何和 ASP.NET Core中间件进行集成。
BUG 修复
另外在这个版本中,我们修复了一些已知的Bug,以下是已经修复的问题列表。
- 修复消息无限重试的问题(PR #1456 - 感谢 @bschwehn):这一修复解决了订阅者移除后消息重试机制的问题。
- 修复 Open Telemetry 上下文丢失(PR #1452 - 同样感谢 @bschwehn):这个修复确保了在消费者重试和Baggage传播过程中上下文的完整性。
- 修复 NATS 连接重连处理问题(PR #1449 - 感谢 @davidterins)。
- 修复 DotNetCore.CAP.InMemoryStorage 发件箱模式消息恢复问题(PR #1439 - 同样感谢 @davidterins)。
- 修复 Azure Service Bus 事件处理程序的双重注册问题(PR #1427 - 同样感谢 @demorgi)。
- 修复 SQL Server 事务中发布延迟消息的问题(PR #1422 - 感谢 @xiangxiren。
总结
以上,就是本版本我们做出的一些新特性和改动,感谢大家的支持,我们很开心能够帮助到大家 。
大家在使用的过程中遇到问题希望也能够积极的反馈,帮助CAP变得越来越好。
如果你喜欢这个项目,可以通过下面的连接点击 Star 给我们支持。
如果你觉得本篇文章对您有帮助的话,感谢您的【推荐】。
本文地址:http://www.cnblogs.com/savorboard/p/cap-8-0.html
作者博客:Savorboard
本文原创授权为:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
CAP 8.0 版本发布通告 - CAP 7岁生日快乐!的更多相关文章
- CAP 3.0 版本发布通告
前言 大家好,我们很高兴宣布 CAP 发布了 3.0 版本正式版. 自从上次 CAP 2.6 版本发布 以来,已经过去了几个月的时间,关注的朋友可能知道,在这几个月的时间里,也发布了几个预览版的 3. ...
- CAP 5.0 版本发布通告
前言 今天,我们很高兴宣布 CAP 发布 5.0 版本正式版.同时我们也很高兴的告诉你 CAP 已经有越来越多的用户并且变得越来越流行. 在 5.0 版本中,我们主要致力于更好的支持 .NET 5 以 ...
- CAP 6.0 版本发布通告 - 支持 OpenTelemetry
前言 今天,我们很高兴宣布 CAP 发布 6.0 版本正式版,在这个版本中,我们主要致力于对 OpenTelemetry 提供支持,以及更好的适配 .NET 6. 那么,接下来我们具体看一下吧. 总览 ...
- CAP 7.0 版本发布通告 - 支持延迟消息,性能炸了?
前言 今天,我们很高兴宣布 CAP 发布 7.0 版本正式版,我们在这个版本中带来了大批新特性以及对性能的优化和改进. 自从今年 1月份发布 6.0 版本以来,已经过去了快1年的时间.在过去的将近1年 ...
- CAP 3.1 版本发布通告
前言 今天,我们很高兴宣布 CAP 发布 3.1 版本正式版.同时我们也很高兴的告诉你 CAP 在 GitHub 已经突破了 4000 Star. CAP 3000 Star 还是去年8月份的时候,最 ...
- CAP 5.1 版本发布通告 - 你期待的 Redis 来了
前言 今天,我们很高兴宣布 CAP 发布 5.1 版本正式版,在这个版本里我们同样引入了更多令人激动的新特性和改进,同时也得到越来越多人的喜爱. 得益于社区的反馈和贡献者的支持,在过去的两个月里,我们 ...
- CAP 2.6 版本发布通告
前言 今天,我们很高兴宣布 CAP 发布 2.6 版本正式版.同时我们也很高兴的告诉你 CAP 在 GitHub 已经突破了3000 Star. 自从上次 CAP 2.5 版本发布 以来,已经过去了几 ...
- CAP 5.2 版本发布通告
前言 今天,我们很高兴宣布 CAP 发布 5.2 版本正式版,在这个版本中,我们主要致力于更好的优化使用体验以及支持新的 Transport,同时在该版本也进行了一些 bug 修复的工作. 自从 5. ...
- CAP 6.1 版本发布通告
前言 今天,我们很高兴宣布 CAP 发布 6.1 版本正式版,在这个版本中我们主要针对目前已经发现的几个BUG进行了修复了以及添加了一些小特性. 那么,接下来我们具体看一下吧. 总览 可能有些人还不知 ...
- CAP 6.2 版本发布通告
前言 今天,我们很高兴宣布 CAP 发布 6.2 版本正式版,在这个版本中我们主要做了一些功能优化,以及针对目前已经发现的几个 BUG 进行了修复了. 那么,接下来我们具体看一下吧. 总览 可能有些人 ...
随机推荐
- QA|重写了元素定位后报错xx object has no attribute 'find_element'|网页计算器自动化测试实战
代码如下: 1 # basepage.py 2 3 from selenium import webdriver 4 5 6 class BasePage(): 7 """ ...
- 构建iOS交叉编译环境
要进行高级的iOS编程,我们需要很多工具链来帮我们完成这一目的 构建iOS交叉编译环境: 1.新建一个iphone交叉编译虚拟机 2. 为我们的虚拟机添加第二个网卡,设为host-only来达到能与宿 ...
- 微信小程序隐私保护协议修改方法 uniapp
微信隐私保护协议指南 一天天没事闲的 01 在manifest.json 中添加一行 "__usePrivacyCheck__" : false 02 自定义一个弹窗组件 ...
- [WPF]使用HLSL实现百叶窗动效
百叶窗动画是制作PPT时常用的动画之一,本文将通过实现百叶窗动画效果的例子介绍在WPF中如何使用ShaderEffect.ShaderEffect是使用高级着色器语言(High Level Shadi ...
- sqlite/mysql 省市县三级联动
这个是sqlite的, 改下表结构, 就可以给mysql用了 CREATE TABLE ProvinceCityZone ( _id INTEGER PRIMARY KEY AUTOINCREMENT ...
- Kafka Stream 流和状态
4.2将状态操作应用到Kafka Stream 在上图的拓扑中生成了一个购买-交易事件流,拓扑中的一个处理节点根据销售额来计算客户的奖励级分.但在这个处理其中,要做的也仅仅时计算单笔交易的总积分,并转 ...
- 记一次 .NET 某餐饮小程序 内存暴涨分析
一:背景 1. 讲故事 前些天有位朋友找到我,说他的程序内存异常高,用 vs诊断工具 加载时间又太久,让我帮忙看一下到底咋回事,截图如下: 确实,如果dump文件超过 10G 之后,市面上那些可视化工 ...
- Flask框架——Flask脚本、flask知识点补充
文章目录 Flask_脚本 1 集成Python shell 1.1 flask-script的用法: 1.1.1 实例:flask-script的简单实现 1.1.1命令添加方式: 第一种(无参命令 ...
- Java 集合的排序(正序倒序)、查找元素的下边、最大值、最小值
Java 集合的排序(正序倒序).查找元素的下边.最大值.最小值 集合的排序 集合查找对应元素的下标 集合的最大最小值 集合的排序 使用Collections.sort()排序,默认是递增.加上比较器 ...
- AI图形算法之一:液位计识别
AI人工智能的主要应用之一就是图形化处理和识别,之前写了两篇,分别是: AI图形算法的应用之一:通过图片模板对比发现油田漏油 AI图形算法的应用之一:仪表识别 经过几个晚上的辛苦,液位计识别也测试成功 ...