1. 程式人生 > >CAP 3.0 版本釋出通告

CAP 3.0 版本釋出通告

前言

大家好,我們很高興宣佈 CAP 釋出了 3.0 版本正式版。

自從上次 CAP 2.6 版本釋出 以來,已經過去了幾個月的時間,關注的朋友可能知道,在這幾個月的時間裡,也釋出了幾個預覽版的 3.0 版本的NuGet包。

3.0 是一個主要版本,在這個版本中我們對程式碼進行了大量重構,重構的目的是為了讓程式碼保持清潔並且邏輯更加清晰易讀,並且介面更加合理。作為一個主要版本並進行大量重構的前提下避免不了會帶來一些破壞性更新,但這些都是值得的。

簡介

可能有些人還不知道 CAP 是什麼,老規矩來一個簡介。

CAP 是一個用來解決微服務或者分散式系統中分散式事務問題的一個開源專案解決方案(https://github.com/dotnetcore/CAP)同樣可以用來作為EventBus使用,目前已經3歲了,目前已經應用到了很多的公司和專案中,

想對 CAP 更多瞭解的同學可以看下官方文件。

本次在 CAP 3.0 版本中我們主要帶來了以下破壞性改變和新特性:

破壞性改變:

  • 訊息協議和儲存
  • 介面改動
  • 分離 Dashboard 專案

新特性:

  • 新的釋出Api
  • 新的序列化介面
  • 全新的 Diagnostics 事件和結構
  • 新的Kafka Transport配置項
  • 其他改進

下面我們就來逐一看一下吧。

破壞性改變

本次版本我們帶來了一個破壞性的改變,這導致我們的 3.0 版本是不和 2.0 版本的訊息相容的,所以大家在升級的時候注意一下。

訊息協議和儲存

在過去,訊息是被CAP經過了一次包裝然後序列化為json傳送到訊息佇列中,並且消費端也是由CAP進行解包然後反序列化為需要的物件。這樣有什麼問題呢? 這會導致一是無法對訊息進行自定義序列化,二會導致使用者在和其他客戶端傳送到訊息佇列的訊息進行對接的時候需要進行額外的適配工作。

基於以上原因,我們調整了傳送和消費的資料結構和儲存方式。使用更加原生的方式來實現。你傳送的訊息將會被直接序列化後傳遞到訊息佇列的 Body 中,元資料資訊將被傳遞到訊息佇列的 Header 中。

資料庫的資料結構我們在新版本並沒有調整,在升級的過程中需要注意的是訊息都已經被消費完成了,這樣就不會讀到舊的訊息從而出現失敗的問題。

介面改動

我們重構了一些介面,大部分情況下如果你是按照推薦的方式在使用CAP那麼不會對你有影響
,如果你在升級新版本的過程遇到問題,可以參考最新程式碼進行調整。

分離 Dashboard 專案

在這個版本中,我們將 Dashboard 相關程式碼分離了出去形成了一個新的專案,如果你需要使用到 Dashbaord 相關功能,可以從 NuGet 安裝它。

PM> Install-Package DotNetCore.CAP.Dashboard

新的釋出Api

我們在 ICapPublisher 介面新增了一個Api 用於傳送帶有頭資訊的訊息。

Task PublishAsync<T>(string name, T contentObj, IDictionary<string, string> headers);

頭將被直接傳送的訊息佇列支援的訊息頭進行傳輸,通常你可以傳遞和訊息體相關的元資料資訊在裡面。

預設情況下,我們傳送了 訊息Id,訊息名稱,訊息型別,傳送時間 等,利用此介面你可以新增更多資訊到頭資料中。

在消費者這邊,你可以通過 [FromCap] 標籤來從 CapHeader 中讀取頭資訊,下面展示瞭如何在消費者方法中讀取傳送的頭資訊。

[CapSubscribe("sample.rabbitmq.mysql")]
public void Subscriber2(DateTime p, [FromCap]CapHeader header)
{
    // header["my-header"]
}

新的序列化介面

新增了 ISerializer 序列化介面,以支援對發往訊息佇列的訊息體進行自定義序列化,你可以通過自定義實現此介面來使用你喜愛的序列化器。

預設情況下,我們使用的是 json 來對訊息進行序列化,我們推薦使用此方式。因為這樣你可以在 RabbitMQ Management 控制檯來測試傳送訊息更加的方便。

全新的 Diagnostics 事件和結構

我們改進了 Diagnostics 事件和資料結構,提供對最新事件的追蹤。並且我們優化了資料結構,現在可以過的更新執行時的狀態資訊。

我們已經針對 Skywalking 提交了 PR 已支援最新的 CAP 事件的追蹤,新的追蹤支援從 Controller 到訊息釋出,訊息消費等全鏈路的跟蹤。

新的Kafka Transport配置項

我們在 Kafka 配置項中增加了 CustomHeaders,如果你需要在消費者方法中記錄當前 Kafka 消費的 Offset 或者 Partition 等資訊,可以利用此擴充套件來新增自定義 header。

你可以在這裡找到關於如何使用它。

其他改進

  • 支援重命名錶名稱, 參考 issue #435。
  • Bug修復,具體可以檢視這裡的 release 日誌瞭解更多。
  • 依賴的 NuGet 包更新

總結

以上,就是本版本中支援的一些新特性,感謝大家的支援,我們很開心能夠幫助到大家
。大家在使用的過程中遇到問題希望也能夠積極的反饋,幫助CAP變得越來越好。:)

如果你喜歡這個專案,可以通過下面的連線點選 Star 給我們支援。

如果你覺得本篇文章對您有幫助的話,感謝您的【推薦】。

如果你對 .NET Core 有興趣的話可以關注我,我會定期的在部落格分享我的學習心得。


本文地址:http://www.cnblogs.com/savorboard/p/cap-3-0.html
作者部落格:Savorboard
本文原創授權為:署名 - 非商業性使用 - 禁止演繹,協議普通文字 | 協議法律文字