最近流行微服务架构、docker容器化部署,但大都是java技术栈下面的,作为一个.NET技术框架下摸爬滚打这么多年的“资深”程序员,肯定要寻找下在.net下怎么实现?毕竟C#语言优势是不可比拟的,所以呢,前段时间研究了下.net core,首先.net core是支持docker部署的,其次这也是微软未来的发展方向。
这是我第一次写文章发布在网上,当然平时也有写一些但都是离线的,有什么不足之处还请各位看官多多原谅,废话不多说了。
1.下载安装Consul
官网下载地址:https://www.consul.io/
下载之后解压缩在一个目录下,然后打开cmd命令窗口
![](https://img.haomeiwen.com/i5036956/832d777d02e56f45.png)
启动Consul
输入命令:consul agent -dev -client 192.168.10.134 -ui
这里的IP可以localhost,但是为了远程能够访问,就用本机IP了
![](https://img.haomeiwen.com/i5036956/af31a370efab6304.png)
这里只做单机版演示,如果是集群请忽略,加上-ui就可以通过网页查看已注册到consul的服务了,如下图所示,这样就是成功了
![](https://img.haomeiwen.com/i5036956/c6e606e101d8c57f.png)
2.新建WebApi服务
打开VS2019,选择asp.net core web应用程序,然后为项目起个名称,这里就不赘述了。
![](https://img.haomeiwen.com/i5036956/943a914aba65fb55.png)
Nuget安装consul,目前最新版是0.7.2.6,安装完成之后就可以开始码代码了
![](https://img.haomeiwen.com/i5036956/a8b9a3af415195bb.png)
修改appsettings.json文件
![](https://img.haomeiwen.com/i5036956/712204a77dcac687.png)
新增一个扩展类,自动注册服务到consul
![](https://img.haomeiwen.com/i5036956/196d2639eee73b76.png)
在startup.cs调用注册服务接口,这样就实现了启动服务时自动注册。
![](https://img.haomeiwen.com/i5036956/8ecfb0d649c4260e.png)
运行结果:
![](https://img.haomeiwen.com/i5036956/a82a102c8a660bb8.png)
调用http://192.168.10.134:8500/v1/catalog/service/Web.Core.App接口可以得到以下信息,Address和端口都有了,请注意Web.Core.App是我注册的服务名,每个服务名称都不一样。
![](https://img.haomeiwen.com/i5036956/597748615930caac.png)
3.新建服务发现项目
Nuget安装Ocelot,及其他依赖项,如下图所示:
![](https://img.haomeiwen.com/i5036956/58a9606568952cdd.png)
Ocelot是一个用.NET Core实现并且开源的API网关技术,它的功能包括了:路由、请求聚合、服务发现、认证、鉴权、限流熔断、并内置了负载均衡器、Service Fabric、Skywalking等的集成。而且这些功能都只需要简单的配置即可完成。
我们这个项目只结合Consul服务发现的功能
![](https://img.haomeiwen.com/i5036956/3f634b74d6966bb8.png)
回到项目上,新增一个ocelotSettings.json配置文件
![](https://img.haomeiwen.com/i5036956/eecfebf48623e396.png)
修改program.cs类
![](https://img.haomeiwen.com/i5036956/644ad74787a9fb84.png)
修改startup.cs类
![](https://img.haomeiwen.com/i5036956/67a61ef7cbe2ad47.png)
运行项目,这样ocelot就自动发现了服务,并且通过路由进行了转发。
原来接口地址是,http://localhost:55796/api/values
![](https://img.haomeiwen.com/i5036956/f812f9f53eacf139.png)
经过网关之后自动转成了,http://localhost:8083/Web.Core.App/values
![](https://img.haomeiwen.com/i5036956/2561ba2ffa0ce2d7.png)
比较两个结果是一致的,好了就先写到这。
网友评论