前言
今天,我們很高興宣佈 CAP 發佈 7.1 版本正式版,我們在這個版本中解決了一個長期以來的問題,也添加了幾個小特性及修復了幾個Bug。
從 NuGet 數據來看,我們於去年底發佈的7.0版本非常受歡迎,如果你還沒有看到我們 7.0 的新特性的話,這裏是傳送門。
現在 CAP 在 NuGet 的下載量已經超過了400萬,作爲一個非工具類的庫,還是非常厲害的。當然這不僅僅是作者我一個人的功勞,還得益於我們的用戶,反饋者,特別是貢獻者。說到貢獻者,自7.0版本以來,我們又增加了幾個貢獻者。分別是:@周潭潭,@Giorgi Lekveishvili,@Taha İPEK,@李正浩,@Mustafa Çağatay Kızıltan。
下面,具體看一下我們新版本的功能吧。
總覽
可能有些人還不知道 CAP 是什麼,老規矩來一個簡介。
CAP 是一個用來解決微服務或者分佈式系統中分佈式事務問題的一個開源項目解決方案(https://github.com/dotnetcore/CAP)同樣可以用來作爲 EventBus 使用,該項目誕生於2016年,目前在 Github 已經有超過 5.9k Star 和 90+ 貢獻者,以及在 NuGet超 400 萬的下載量,並在越來越多公司的和項目中得到應用。
如果你想對 CAP 更多瞭解,請查看我們的 官方文檔。
本次在 CAP 7.1 版本中我們主要帶來了以下新特性:
- 添加配置項已啓用對分佈式鎖的支持
- RabbitMQ 添加對 BasicQos 配置項的支持
- Azure Service Bus 客戶端包更新爲 Microsoft.Azure.ServiceBus
- Azure Service Bus 支持發佈消息到多個Topic
- Azure Service Bus 添加 SQL Filter 的支持
- 添加對開啓事務異步方法的支持
- BUG 修復
- 修復 Dashbaord 在 Balzor 應用中無法工作的問題
- 修復從 Dashboard 觸發重新執行,消息無法執行的問題
- 修復 Redis Streams Json 序列化問題
- 修復 Redis Streams 讀取或創建流時冪等檢查的問題
添加配置項已啓用對分佈式鎖的支持
對CAP比較熟悉的用戶知道,CAP內部有一個重試的線程默認每隔1分鐘來讀取存儲的消息用於對發送或消費失敗的消息進行重試,單個實例沒有什麼問題,那麼在啓用多個實例的場景下會有一定機率出現併發讀的情況,這就會導致消息被重複發送或消費。過去我們要求消費者對關鍵消息進行冪等性保證來避免負面影響,現在我們提供了一種方式來避免這種情況發生。
在 7.1.0 版本中,我們新增了一個配置項 UseStorageLock
來支持配置基於數據庫的分佈式鎖,這樣可以避免多實例併發讀的問題,並且對異常場景的處理也進行了考慮。
注意:在開啓 UseStorageLock
後,系統將會生成一個 cap.lock 的數據庫表,此表用於通過數據庫來實現分佈式鎖。
感謝 @李正浩 對此提交的PR。我想特別說一下,我們不認識 ,但是半夜12點多還在GitHub和我討論問題,提交代碼(#1272,#1274),應該是一個很努力的小夥子,我們這次這個長期以來的問題就是他貢獻的PR,所以特別感謝,他的博客 https://www.lizhenghao.site
RabbitMQ 添加對 BasicQos 配置項的支持
我們在RabbitMQ中添加了對 BasicQos 的配置項支持,BasicQos主要用於配置RabbitMQ中消息分發給消費者的 PrefetchCount,也就是未Ack的數量。
通過在UseRabbitMQ中的 BasicQosOptions
來設置,用法如下:
services.AddCap(x =>
{
x.UseRabbitMQ(y =>
{
y.BasicQosOptions = new DotNetCore.CAP.RabbitMQOptions.BasicQos(3);
});
});
感謝 @nunorelvao 對此提交的PR。
Azure Service Bus 客戶端包更新爲 Azure.Messaging.ServiceBus
在這個版本中,我們將 Microsoft.Azure.ServiceBus
客戶端包變更爲了 Azure.Messaging.ServiceBus
。
Microsoft.Azure.ServiceBus
目前已經被棄用,官方建議建議使用 Azure.Messaging.ServiceBus。
感謝 @Giorgi Lekveishvili 對此提交的 PR。
Azure Service Bus 支持發佈消息到多個Topic
過去,CAP只支持將消息發送到Azure Service Bus中的一個Topic 上,但是實際使用過程中有時候需要發送到多個Topic,此版本提供對根據消息類型配置發送Topic的選項的支支持。
用法如下:
capOptions.UseAzureServiceBus(asb =>
{
// other configuration
asb.ConfigureCustomProducer<EntityCreatedForIntegration>(cfg => cfg.WithTopic("entity-created"));
});
感謝 @mviegas , @jonekdahl 對此提交的PR。
Azure Service Bus 添加 SQL Filter 的支持
我們對 Azure Service Bus 添加了對 SQL Filter 配置項的支持,你可以在訂閱消息的時候,通過設置Sql Filter 來只訂閱你需要的消息,而不必在業務邏輯中進行過濾。用法如下:
c.UseAzureServiceBus(asb =>
{
asb.ConnectionString = ...
asb.SQLFilters = new List<KeyValuePair<string, string>> {
new KeyValuePair<string,string>("IOTFilter","FromIOTHub='true'"),//The message will be handled if ApplicationProperties contains IOTFilter and value is true
new KeyValuePair<string,string>("SequenceFilter","sys.enqueuedSequenceNumber >= 300")
};
});
感謝 @Giorgi Lekveishvili 對此提供的 PR。
添加對開啓事務異步方法的支持
在這個版本中,我們提供了新的異步擴展方法用於開啓事務,並且支持傳遞 IsolationLevel 參數,感謝 @Mahmoud Shaheen 對此提交的PR!
BUG 修復
另外在這個版本中,我們修復了一些已知的Bug,以下是已經修復的問題列表。
- 修復 Dashbaord 在 Balzor 應用中無法工作的問題
- 修復從 Dashboard 觸發重新執行,消息無法執行的問題
- 修復 Redis Streams Json 序列化問題
- 修復 Redis Streams 讀取或創建流時冪等檢查的問題
總結
以上,就是本版本我們做出的一些新特性和改動,感謝大家的支持,我們很開心能夠幫助到大家 。
大家在使用的過程中遇到問題希望也能夠積極的反饋,幫助CAP變得越來越好。😃
如果你喜歡這個項目,可以通過下面的連接點擊 Star 給我們支持。
如果你覺得本篇文章對您有幫助的話,感謝您的【推薦】。
本文地址:http://www.cnblogs.com/savorboard/p/cap-7-1.html
作者博客:Savorboard
本文原創授權爲:署名 - 非商業性使用 - 禁止演繹,協議普通文本 | 協議法律文本