eShopOnContainers 看微服务④:Catalog Service
服務簡介
Catalog service(目錄服務)維護著所有產品信息,包括庫存、價格。所以該微服務的核心業務為:
產品信息的維護
庫存的更新
價格的維護
架構模式
先看代碼結構(下圖)。
主要依賴:
1、HealthCheck 健康檢查
2、WebHost
3、Entity Framework
4、Autofac
5、BuildingBlocks文件夾下的EventBus,RabbitMq
其中前四項在Identity Service里面都已經用到了。事件總線EventBus是第一次用到,我們后面會詳細講到。?
這個服務采用簡單的數據驅動的CRUD微服務架構,來執行產品信息的創建、讀取、更新和刪除(CRUD)操作。
?這種類型的服務在單個 ASP.NET Core Web API 項目中即可實現所有功能,該項目包括數據模型類、業務邏輯類及其數據訪問類。?
啟動流程?
?我們還是從程序啟動處開始看,跟identit.API差別不大。
Program.cs
Main函數,用到兩個dbcontext。IntegrationEventLogContext負責記錄事件日志,CatalogContext負責產品。最終數據庫如下:
這里有一個UseWebRoot,用來設置web根:?webroot。
默認情況下如果不指定,是?(Content Root Path)\wwwroot,前提是該路徑存在。如果這個路徑不存在,則使用一個沒有文件操作的提供器。
startup.cs
?
這里有個app.UseCors("CorsPolicy"),實際上services.AddCors是寫在AddCustomMVC擴展函數里面的。?
需要注意的是UseCors必須放在?UseMvc?之前,且策略名稱(CorsPolicy)必須是已經定義的。
業務實體
?
該服務的主要實體是商品CatalogItem,其中包含兩個輔助類CatalogBrand,CatalogType:
我們在看CatalogItem.cs的時候會發現兩個函數AddStock,RemoveStock?
對于實體這一塊:
進行數據庫字段映射時,主鍵都使用了ForSqlServerUseSequenceHiLo指定使用HI-LO高低位序列進行主鍵生成。
使用NoTracking提升查詢速度
在CatalogController的構造方法中,明確指定以下代碼來進行查詢優化,這一點也是我們值得學習的地方。((DbContext)context).ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
在進行種子數據的預置時,使用了Polly開啟了Retry機制。
業務處理
運行起來后,我們瀏覽器輸入 http://localhost:5101?
展開catalog
對應CatalogController.cs代碼
通過構造函數注入了3個對象
他們分別在startup類的AddCustomDbContext,AddCustomOptions,AddIntegrationServices中被注冊到了DI容器。
再看具體的action
通過ProducesResponseType描述HttpStatusCode的返回狀態,200,404
?UpdateProduct函數
這里通過EventBus發布了一個事件,通過這個事件,修改產品價格時,同步更新購物車中保存的產品信息的價格。我們這里暫時不做詳細討論。?
我們先看看eshop如何實現多個context之間的原子性的 _catalogIntegrationEventService.SaveEventAndCatalogContextChangesAsync(priceChangedEvent)的實現代碼:
然后看ResilientTransaction.cs
相關文章:
- eShopOnContainers 看微服務 ①:總體概覽 
- eShopOnContainers 看微服務 ②:配置 啟動 
- eShopOnContainers 看微服務③:Identity Service 
- eShopOnContainers 知多少[1]:總體概覽 
- eShopOnContainers 知多少[2]:Run起來 
- eShopOnContainers 知多少[3]:Identity Microservice 
- eShopOnContainers 知多少[4]:Catalog microservice 
- Catalog Service - 解析微軟微服務架構eShopOnContainers(三) 
- eShopOnContainers 知多少[5]:EventBus With RabbitMQ 
- EventBus In eShop -- 解析微軟微服務架構eShopOnContainers(四) 
- eShopOnContainers 是一個基于微服務的.NET Core示例框架 
原文地址:https://www.cnblogs.com/tianyamoon/p/10141221.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結
以上是生活随笔為你收集整理的eShopOnContainers 看微服务④:Catalog Service的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 微软开源的Trill是什么?
- 下一篇: 开源库Magicodes.Storage
