前言
今天,我們很高興宣佈 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
本文原創授權爲:署名 - 非商業性使用 - 禁止演繹,協議普通文本 | 協議法律文本