前言
我們很高興宣佈 CAP 發佈 8.1 版本正式版,我們在這個版本中主要是添加了一些新的配置項支持,並且根據用戶反饋做了一些功能調整,同時在這個版本開始默認禁用了從7.2版本引入的並行發佈消息。
下面,具體看一下我們新版本的功能吧。
總覽
可能有些人還不知道 CAP 是什麼,老規矩來一個簡介。
CAP 是一個用來解決微服務或者分佈式系統中分佈式事務問題的一個開源項目解決方案(https://github.com/dotnetcore/CAP)同樣可以用來作爲 EventBus 使用,該項目誕生於2016年,目前在 Github 已經有超過 6400+ Star 和 110+ 貢獻者,以及在 NuGet超 700 萬的下載量,並在越來越多公司的和項目中得到應用。
如果你想對 CAP 更多瞭解,請查看我們的 官方文檔。
本次在 CAP 8.1 版本中我們主要帶來了以下新特性:
- 新增支持 EnablePublishParallelSend 配置項
- 允許Mongo啓用事務時指定Session Handle
- 過濾器上下文參數添加 MediumMessage
- 異步開啓事務發送消息API
- AzureServiceBus 支持配置 Correlation header
- PostgreSql 中使用 DataSource 配置連接
- NATS添加新的配置項
- 破壞性改動
- 移除 NATS DeliverPolicy 配置項
- 發佈消息默認行爲調整爲串行發佈
新增支持 EnablePublishParallelSend 配置項
我們在7.2版本中,添加了消息發佈任務由.NET線程池管理的功能,這個特性在發送側默認啓用。由於.NET線程池中執行任務是並行執行的這並不會保證任務的執行順序,所以這會導致一個問題就是在某些場景中用戶希望串行發送保證消息以保證順序,使用線程池的話無法保證做到這一點。
所以我們在這個版本中恢復了串行發送消息的默認行爲,並提供了新的配置項 EnablePublishParallelSend
來開啓並行發送消息。
BTW, 消費側同樣引入了線程池,同樣沒有默認開啓,可以通過 EnableConsumerPrefetch
來啓用,這樣所有的消費者都將並行執行。
添加 Mongo 啓用事務時指定 SessionHandle 擴展
在這個版本中,我們添加了一個新的重載允許使用Mongo存儲在開啓事務時,傳遞 IClientSessionHandle
參數。IClientSessionHandle
相當於關係數據庫中的 DbTransaction,這在你想精確控制事務的場景提供更多靈活性。
public static IClientSessionHandle StartTransaction(this IMongoClient _,
IClientSessionHandle clientSessionHandle,
ICapPublisher publisher, bool autoCommit = false)
{
// 。。。
}
感謝 @shkarface 對此做出的貢獻。
過濾器上下文參數添加 MediumMessage 允許更多可能性
我們在過濾器上下文 ConsumerContext
中,添加了新的 MediumMessage
參數對象。 MediumMessage
這個對象是CAP內部用於和數據庫進行映射的對象,一般用戶不需要關心。
在這個版本中,我們添加此參數的主要原因是用戶可以通過此參數來對消費者執行過程進行更多控制行爲,例如可以根據已完成重試來控制重試次數或者在某些情況禁用重試等。
感謝 @bschwehn 對此做出的貢獻。
異步開啓事務發送消息API
ICapPublisher
接口中的 Transaction
對象現在不再由 AsyncLocal<T>
進行包裝,而是直接是 ICapTransaction
對象,受影響的地方爲自定義事務擴展方法。只需簡單的將 publisher.Transaction.Value =xxx
修改爲 publisher.Transaction= xxx
即可。
我們在本版本重新支持了異步開始事務的拓展方法支持 BeginTransactionAsync
,以下是簡單示例。
using (var connection = new MySqlConnection(ConnectionString))
{
using var transaction = await connection.BeginTransactionAsync(_capBus, true);
await connection.ExecuteAsync("insert into test(name) values('test')", transaction: (IDbTransaction)transaction.DbTransaction);
await _capBus.PublishAsync("sample.rabbitmq.mysql", DateTime.Now);
}
Azure ServiceBus 支持配置 correlation header
我們爲AzureServiceBus添加了新的支持選項 DefaultCorrelationHeaders
,該配置項允許用戶設置 correlation過濾器,你可以在這裏查看詳細信息。
感謝 @demorgi 對此做出的貢獻。
PostgreSql 中使用新的 NpgsqlDataSource 配置項以支持動態密碼
由於在Postgres中直接使用 Connection 連接字符串不支持設置動態密碼,在一些情況下爲了安全需要定期更新密碼,所以爲了支持這個功能,我們支持了使用
來配置數據庫連接,來支持動態更新密碼。
同時使用 NpgsqlDataSource 來配置數據庫連接也是 NpgSql 8.0 版本後的推薦做法。
感謝 @jonekdahl 對此做出的貢獻。
NATS 添加新的配置項
我們爲 NATS 提供了新的配置項允許更加精細的控制在創建 Consumer 連接時候的選項,下面的新增的2個配置項。
StreamOptions
用於創建 Stream 時指定的設置項, Stream相當於是消息的存儲介質,你可能在創建的時候設置持續時間、大小、副本等,你可能在這裏查看更多可能的配置項。
ConsumerOptions
用於指定消費者創建時的相關參數,你可以在這裏查看更多可能的配置項。
破壞性改動
移除 NATS DeliverPolicy 配置項
由於 NATS 添加了新的配置項,所以原本歸屬於 ConsumerOptions中的配置項已經被移除。你可以通過ConsumerOptions來設置。
發佈消息默認行爲調整爲串行發佈
從 7.2 版開始,爲了提高發布方面的性能,我們讓 .NET 線程池負責處理消息發佈。不過,由於線程池中的任務不能保證按順序執行,而且確保線性發布在某些用例中很有意義,因此我們將從本版本開始恢復線性發布。
同時,我們還引入了一個新選項 EnablePublishParallelSend
,允許用戶啓用並行消息發送功能。
總結
以上,就是本版本我們做出的一些新特性和改動,感謝大家的支持,我們很開心能夠幫助到大家 。
大家在使用的過程中遇到問題希望也能夠積極的反饋,幫助CAP變得越來越好。😃
如果你喜歡這個項目,可以通過下面的連接點擊 Star 給我們支持。
如果你覺得本篇文章對您有幫助的話,感謝您的【推薦】。
本文地址:http://www.cnblogs.com/savorboard/p/cap-8-1.html
作者博客:Savorboard
本文原創授權爲:署名 - 非商業性使用 - 禁止演繹,協議普通文本 | 協議法律文本