.Net Core 商城微服務項目系列(六):搭建本身的Nuget包服務器

當咱們使用微服務架構以後,緊接而來的問題即是服務之間的程序集引用問題,可能沒接觸過的同窗不太理解這句話,都已經微服務化了爲何還要互相引用程序集,固然能夠不引用。可是咱們會有這樣一種狀況,咱們的每一個接口都會有請求參數和返回結果,規範來講咱們須要爲每一個接口分別建立一個請求類(Request)和返回類(Response)。當其餘服務或者程序須要調用這個接口傳遞參數和獲得返回結果的時候,最方便的方式就是直接使用服務的程序集,而不是兩邊同時建立Request和RResponse。同時咱們還須要對程序集進行版本控制,並且高本版須要兼容低版本。經過NuGet來進行程序集的使用和版本控制是一件百利而無一害的事,我如今所在的公司即是使用這種方式。docker

這裏說一下我被dll版本坑哭的經歷,同時也爲如今處處拷貝dll的同窗作個提示。我如今的公司架構是從三層改造到微服務的,因此在Web端依然存在着部分三層代碼,不一樣項目之間進行的程序集使用是經過拷貝dll的形式(這裏有兩個三層項目,尚未徹底服務化),A項目中使用了某個服務的程序集,B項目中也使用了該服務的程序集,此時把A項目類庫的dll拷貝到B項目中,若是兩個相同服務的程序集版本不一致,恭喜你,等着報錯吧兄弟(想到這裏我就要哭了,第一次不知道被坑慘了,補了一夜的數據)  !!固然你可能會說難道你拷貝完都不測試的嗎,咱們本身的開發組如今有40多個服務,同時還引用了其它組的服務,當時那個項目裏有十七八個服務的程序集,一堆人開發,一方面我當時不知道這個坑,另外一方面我也沒去看代碼提交記錄誰升級了某個服務的版本,結果發佈還沒2分鐘,大量日誌報警襲來:xxx程序集版本未找到!!唉,當晚補數據到凌晨2點,因此,對於程序集的使用,進行規範化的管理是很是有必要的,更重要的是不要拷貝dll!!!服務器

咱們此次使用Docker搭建一個本身的NuGet服務器(由於Docker實在太簡單了,我已經懶到無可救藥了):架構

docker run -d -p 8090:80 -v $PWD/nuget/db:/var/www/db -v $PWD/nuget/packages:/var/www/packagefiles -e NUGET_API_KEY=ee28314c-f7fe-2550-bd77-e09eda3d0119 sunside/simple-nuget-serveride

這裏環境變量NUGET_API_KEY要記住後面的命令須要使用
成功後以下圖所示:微服務

使用cmd命令到項目文件夾下,執行 dotnet pack 命令:測試

下載Nuget.exe (下載地址https://dist.nuget.org/win-x86-commandline/v4.7.0/nuget.exe)
將Nuget.exe 放置 C:\Program Files\dotnet目錄下(通常安裝了netcoreSDK 必定有這個目錄)spa

 

cmd到項目Debug文件夾下,會看到生成的項目包,執行以下命令:3d

nuget push -Source http://47.99.92.76:8090/ -ApiKey ee28314c-f7fe-2550-bd77-e09eda3d0119 MI.Untity.1.0.0.nupkg 
(這裏的ApiKey則是第一步的環境變量詳細參數查看https://docs.microsoft.com/zh-cn/nuget/tools/cli-ref-push)

項目裏配置包地址,而後就可使用了!版本控制

相關文章
相關標籤/搜索