前言
今天,我们很高兴宣布 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