最近加班有點多,一週五天,四天加班到11點+,心很累。原因是我當前在的這個組比較特殊,相當於業務的架構組,要為其它的開發組提供服務和監控。所以最近更新的也少,不過這個元旦三天假應該會更新三篇。

這篇是介紹一下商城的購物車,程式碼就不詳細介紹了,因為技術點都已經再前面幾篇介紹過了,無非就是產品的增刪該查,當然,資料的更新互動這一塊使用的是我們上一篇介紹的訊息佇列,比如購車的新增、修改、刪除。

商城到這塊功能方面就不打算繼續往下寫了,因為後面的功能都是圍繞業務展開,技術方面千篇一律,而我們的關注點在於技術,所以後面的商城系列,一定是圍繞著技術改造,現在還有幾個技術點沒有完成:

1.日誌使用Log4net+ELK (現在是直接將日誌通過tcp傳送到logstash)

2.新增SkyWalking呼叫鏈監控。

3.RabbitMQ消費端獨立成Windows服務,並新增監控。

4.使用Apollo,將配置於程式進行解耦。

5.新增定時任務、消費補償機制。

6.將服務部署到k8s中。

後面的打算是暫時把這幾個技術點給完成,這些都是我們再生產專案中直接用到的技術,一方面鞏固自己的掌握,另一方面可以給有興趣的人瞭解一下,這裡面,我暫時比較想完成的是第6個,有時間的話我會把這幾個服務部署到k8s中,這樣我們就不再需要依賴Consul的服務註冊和發現機制了。

 

先來看一下購物車完成的情況:

 

 業務其實很簡單,新增到購物車然後進行展示,程式碼也就不細講了,貼下主要的購物車程式碼:

/// <summary>
        /// 修改購物車產品數量
        /// </summary>
        public async Task<JsonResult> CountChange(int? CarID, int ProductID, int VersionID, string Operate)
        {
            var request = new AddCountRequest { CarId = CarID, ProductId = ProductID, VersionId = VersionID };
            if(Operate== "reduce")
            {
                request.Num = -1;
            }
            else
            {
                request.Num = 1;
            }
            eventBus.Publish("ShopCarCountChange", request);
            return Json("OK");
        }

        /// <summary>
        /// 新增購物車
        /// </summary>
        public async Task<JsonResult> AddCar(int ProductID, int VersionID)
        {
            var getColorResponse = await shopCarService.GetColorAsync(new GetColorRequest { VersionId = VersionID });
            //傳送新增購物車MQ
            var addShopCarRequest = new AddShopCarRequest { ProductID = ProductID, VersionID = VersionID };
            try
            {
                eventBus.Publish("AddShopCar", addShopCarRequest);
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
                return Json("error");
            }
            
            return Json("ok");
        }

可以看到,購物車這裡對於資料庫的互動都是通過訊息佇列來完成的,服務的程式碼就不看了,就是普通的增刪改查。

到此。商城服務一共有5個,我們通過Consul看下:

 

 應該不會再新增服務了,後面會逐步的實現文章開始提到的幾個技術點改造。