.Net Core 商城微服务项目系列(六):搭建自己的Nuget包服务器
当我们使用微服务架构之后,紧接而来的问题便是服务之间的程序集引用问题,可能没接触过的同学不太理解这句话,都已经微服务化了为什么还要互相引用程序集,当然可以不引用。但是我们会有这样一种情况,我们的每个接口都会有请求参数和返回结果,规范来说我们需要为每个接口分别创建一个请求类(Request)和返回类(Response)。当其他服务或者程序需要调用这个接口传递参数和得到返回结果的时候,最方便的方式就是直接使用服务的程序集,而不是两边同时创建Request和RResponse。同时我们还需要对程序集进行版本控制,而且高本版需要兼容低版本。通过NuGet来进行程序集的使用和版本控制是一件百利而无一害的事,我现在所在的公司便是使用这种方式。
这里说一下我被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-server
这里环境变量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 一定有这个目录)
cmd到项目Debug文件夹下,会看到生成的项目包,执行如下命令:
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)

项目里配置包地址,然后就可以使用了!
.Net Core 商城微服务项目系列(六):搭建自己的Nuget包服务器的更多相关文章
- .Net Core 商城微服务项目系列(一):使用IdentityServer4构建基础登录验证
这里第一次搭建,所以IdentityServer端比较简单,后期再进行完善. 1.新建API项目MI.Service.Identity,NuGet引用IdentityServer4,添加类InMemo ...
- .Net Core 商城微服务项目系列(十四):分布式部署携程Apollo构建配置中心
一.开场白 在系统设计里我们有很多配置希望独立于系统之外,而又能够被系统实时读取.但是在传统的系统设计里,配置信息通常是耦合在系统内的,比如.net里通常会放在App.config或者web.conf ...
- .Net Core 商城微服务项目系列(十三):搭建Log4net+ELK+Kafka日志框架
之前是使用NLog直接将日志发送到了ELK,本篇将会使用Docker搭建ELK和kafka,同时替换NLog为Log4net. 一.搭建kafka 1.拉取镜像 //下载zookeeper docke ...
- .Net Core 商城微服务项目系列(七):使用消息队列(RabbitMQ)实现服务异步通信
RabbitMQ是什么,怎么使用我就不介绍了,大家可以到园子里搜一下教程.本篇的重点在于实现服务与服务之间的异步通信. 首先说一下为什么要使用消息队列来实现服务通信:1.提高接口并发能力. 2.保证 ...
- .Net Core 商城微服务项目系列(十二):使用k8s部署商城服务
一.简介 本篇我们将会把商城的服务部署到k8s中,同时变化的还有以下两个地方: 1.不再使用Consul做服务的注册和发现,转而使用k8s-dns来实现. 2.不再使用Ocelot作为业务网关,使用T ...
- .Net Core 商城微服务项目系列(九):使用Jenkins构建自动发布
1.首先通过Docker运行Consul,并保证各个服务都成功注册: 然后运行jenkins,对MI.Web项目进行发布构建,至于怎么配置之前已经写过了,和上一篇一模一样,这里贴下批处理命令: cd ...
- .Net Core 商城微服务项目系列(十一):MQ消费端独立为Window服务+消息处理服务
之前使用MQ的时候是通过封装成dll发布Nuget包来使用,消息的发布和消费都耦合在使用的站点和服务里,这样会造成两个问题: 1.增加服务和站点的压力,因为每次消息的消费就意味着接口的调用,这部分的压 ...
- .Net Core 商城微服务项目系列(五):使用Polly处理服务错误
项目进行微服务化之后,随之而来的问题就是服务调用过程中发生错误.超时等问题的时候我们该怎么处理,比如因为网络的瞬时问题导致服务超时,这在我本人所在公司的项目里是很常见的问题,当发生请求超时问题的时候, ...
- .Net Core 商城微服务项目系列(八):购物车
最近加班有点多,一周五天,四天加班到11点+,心很累.原因是我当前在的这个组比较特殊,相当于业务的架构组,要为其它的开发组提供服务和监控.所以最近更新的也少,不过这个元旦三天假应该会更新三篇. 这篇是 ...
随机推荐
- 洛谷P2577 [ZJOI2005]午餐 打饭时间作为容量DP
P2577 [ZJOI2005]午餐 )逼着自己做DP 题意: 有n个人打饭,每个人都有打饭时间和吃饭时间.有两个打饭窗口,问如何安排可以使得总用时最少. 思路: 1)可以发现吃饭时间最长的要先打饭. ...
- hdu 5903 Square Distance(dp)
Problem Description A string is called a square string if it can be obtained by concatenating two co ...
- CF940A Points on the line 思维
A. Points on the line time limit per test 1 second memory limit per test 256 megabytes input standar ...
- 【Offer】[58-2] 【左旋转字符串】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能.比如,输入字符串"a ...
- velocity中文乱码
当使用velocity出现中文乱码. 首先:我们设置 eclipse的编码方式 : 右键工程师属性->properties->查看编码格式是否伟URF-8 然后:spring-xml文件中 ...
- Spring事务失效的2种情况
使用默认的事务处理方式 因为在java的设计中,它认为不继承RuntimeException的异常是”checkException”或普通异常,如IOException,这些异常在java语法中是要求 ...
- Spring Cloud(三):声明式调用
声明式服务调用 前面在使用spring cloud时,通常都会利用它对RestTemplate的请求拦截来实现对依赖服务的接口调用,RestTemplate实现了对http的请求封装处理,形成了一套模 ...
- FreeSql (二十六)贪婪加载 Include、IncludeMany、Dto、ToList
贪婪加载顾名思议就是把所有要加载的东西一次性读取. 本节内容为了配合[延时加载]而诞生,贪婪加载和他本该在一起介绍,开发项目的过程中应该双管齐下,才能写出高质量的程序. Dto 映射查询 Select ...
- springboot数据库主从方案
本篇分享数据库主从方案,案例采用springboot+mysql+mybatis演示:要想在代码中做主从选择,通常需要明白什么时候切换数据源,怎么切换数据源,下面以代码示例来做阐述: 搭建测试环境(1 ...
- HMAC256 Token
依赖包: <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</arti ...