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