.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点+,心很累.原因是我当前在的这个组比较特殊,相当于业务的架构组,要为其它的开发组提供服务和监控.所以最近更新的也少,不过这个元旦三天假应该会更新三篇. 这篇是 ...
随机推荐
- C#开发BIMFACE系列2 二次开发流程
系列目录 [已更新最新开发文章,点击查看详细] BIMFACE 平台是一个对外开放的平台,建筑行业的相关公司.软件公司或者有 BIM 业务需求的公司都可以注册成为开发者并使用其提供的强大功能. ...
- 文件系统【图片处理】(基于thumbnailator)典藏版-壹
很多系统开发中都会碰到文件相关的处理,最近顺手开发一个小型文件系统的过程中碰到图片缩略图的需求,需要在显示的时候提供缩略图,下载的时候提供原图,大家直接想到的可能是java自带的图片处理类,但是处理过 ...
- HttpClient 三种 Http Basic Authentication 认证方式,你了解了吗?
Http Basic 简介 HTTP 提供一个用于权限控制和认证的通用框架.最常用的 HTTP 认证方案是 HTTP Basic authentication.Http Basic 认证是一种用来允许 ...
- Java入门指南-02 变量
一.回顾上一篇讲到了常用的DOS命令.如何创建第一个程序.打印.注释与空白. 那么我们已经学会了使用System.out.println() 可以来输出一个值.进一步的,我们可以用它来显示简单的算术运 ...
- Badboy - 导出脚本,用于JMeter并发测试
参考: http://leafwf.blog.51cto.com/872759/1141011 http://www.51testing.com/html/00/130600-1367743.html ...
- 一篇文章看懂JS执行上下文
壹 ❀ 引 我们都知道,JS代码的执行顺序总是与代码先后顺序有所差异,当先抛开异步问题你会发现就算是同步代码,它的执行也与你的预期不一致,比如: function f1() { console.lo ...
- JUC(1)
cmd目录切换 D:\>cd /d D:\Program Files\Java\jdk1.8.0_201\bin 1. JUC 简介 在 Java 5.0 提供了 java.util.concu ...
- 全栈开发博客系统(nodejs+vuejs+mongodb)
本篇文章将会介绍如何使用nodejs+vuejs构建个人博客. 主要分三部分内容: 环境准备 博客后端管理系统(admin) 后端服务(主要提供admin及web端接口) 博客前端展示(web) 环境 ...
- jsp页面直接输出了html代码
可能出现的情况: 1.修改web.xml中springMVC的过滤器路径如下: "/"与"/*区别" 其实/和/*都可以匹配所有的请求资源,但其匹配的优先顺序是 ...
- 什么是Json,Json如何使用
JavaScript Object Notation:javascript的对象表示法. 这是一种能传递对象的语法,可以是键值对,数组,以及其他对象. 轻量级的数据传输方法. json格式: { ke ...