CAP 8.0 版本釋出通告

2023-12-21 12:01:37

前言

今天,我們很高興宣佈 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 中移除 DefaultAuthenticationSchemeUseChallengeOnAuthDefaultChallengeSchemeAuthorizationPolicy 設定項。
  • 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 中移除 DefaultAuthenticationSchemeUseChallengeOnAuthDefaultChallengeSchemeAuthorizationPolicy 設定項。

現在將基於於 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變得越來越好。