日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

eShopOnContainers 看微服务④:Catalog Service

發布時間:2023/12/4 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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負責產品。最終數據庫如下:



    BuildWebHost函數:

    這里有一個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個對象


    context,settings,catalogIntegrationEventService
    他們分別在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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。