前言
首先,恭喜 CAP 已經成為 eShopOnContainers 官方推薦的生產環境可用的 EventBus 之一。
自從上次 CAP 2.4 版本發布 以來,已經過去了幾個月的時間,關注的朋友可能知道,在這幾個月的時間里,也發布了幾個預覽版的 2.5 版本的NuGet包。
簡介
可能有些人還不知道 CAP 是什么,老規矩來一個簡介。
CAP 是一個用來解決微服務或者分布式系統中分布式事務問題的一個開源項目解決方案(https://github.com/dotnetcore/CAP)同樣可以用來作為EventBus使用,目前已經2歲了,目前已經應用到了很多的公司和項目中,
想對 CAP 更多了解的同學可以看下官方文檔。
在 CAP 2.5版本中主要帶來了以下新特性:
- 支持內存存儲
- 支持Azure Service Bus
- 社區支持的內存隊列
下面我們就來逐一看一下這些新的特性。
支持內存存儲(In-Memory Storage)
應一些用戶的要求,我們在事件的存儲方面,我們添加了基於內存的事件存儲。因為在一些場景下對數據的一致性要求不是很高,或者說可以接受消息丟失的這種情況,但是他們想提高消息的吞吐量,所以在這個情境下,我們提供了支持內存存儲的方案。
那么,內存存儲有哪些優缺點呢?
優點
- 吞吐量的提高,這也意味着可以容忍消息有丟失的情況存在
- 在測試項目或者學習的過程中能夠快速入門或者進行試驗。
缺點
- 不對事務提供支持
因為我們需要利用數據庫的ACID特性來保證數據強一致性,很顯然內存存儲不具備這樣的特性,所以在發消息的時候就不需要接管業務的事務了,直接發就行了。
支持 Azure Service Bus
在新的 2.5版本中,我們添加了對 Azure Service Bus 的支持, Azure Service Bus 是一種完全托管的企業集成消息中間件。
Azure Service Bus 最常用於將應用程序與服務彼此解耦,是一種用於異步數據和狀態傳輸的可靠且安全的平台。 數據通過消息在不同的應用程序和服務之間傳輸。 消息采用二進制格式,可能包含 JSON、XML 或純文本。
下面說一下如果使用 Azure Service Bus 對接CAP。
- 在 Azure 市場中搜索 Service Bus,然后選擇創建命名空間。
- 在名稱填寫你的項目或者應用名稱,定價層選擇“標准”或者“高級”因為基本的不支持Topic功能,然后選擇要創建的位置,根據需要選擇即可。如下圖:
- 創建完成之后,在共享訪問策略(Shared access policies)中找到主連接字符串,填到CAP的配置中即可。
下面為使用內存儲存和Azure Service Bus 配合的配置示例,同樣你可以在這里找到示例程序。
services.AddCap(x =>
{
x.UseInMemoryStorage();
x.UseAzureServiceBus("Endpoint=sb://testcap.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=<your-key>");
x.UseDashboard();
});
最后需要說明的是,在 Azure Service Bus 中,CAP會自動創建 Topic 而不需要人工干預,當然你可以通過配置項來自定義創建的名稱。
社區支持的內存隊列
在我們支持 In-Memory Storage 的過程中,有同學提出他們在跑集成測試的過程中需要使用真實的消息隊列來做測試,這樣非常不方便,問能不能夠提供一個內存版的消息隊列供測試使用。 現在,社區已經提供了相關對內存隊列支持的CAP擴展項目。
項目地址:https://github.com/yang-xiaodong/Savorboard.CAP.InMemoryMessageQueue
配置方式:
services.AddCap(x =>
{
x.UseInMemoryStorage();
x.UseInMemoryMessageQueue();
});
需要注意的是,此項目僅僅用戶開發環境和測試使用,請不要用於生產環境。
總結
以上,就是本版本中支持的一些新特性,感謝大家的支持,我們很開心能夠幫助到大家。大家在使用的過程中遇到問題希望也能夠積極的反饋,幫助CAP變得越來越好。😃
如果你喜歡這個項目,可以通過下面的連接點擊 Star 給我們支持。
如果你覺得本篇文章對您有幫助的話,感謝您的【推薦】。
如果你對 .NET Core 有興趣的話可以關注我,我會定期的在博客分享我的學習心得。
本文地址:http://www.cnblogs.com/savorboard/p/cap-2-5.html
作者博客:Savorboard
本文原創授權為:署名 - 非商業性使用 - 禁止演繹,協議普通文本 | 協議法律文本