Net Core 微服务 - 开源API网关Ocelot 最简单的配置指南
什么是Ocelot?
Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由、请求聚合、服务发现、认证、鉴权、限流熔断、并内置了负载均衡器与Service Fabric、Consul集成。这些功能都只需要简单的配置即可完成,下面我们会对这些功能的配置一一进行说明。
Ocelot的实现原理
简单的来说Ocelot是一堆的asp.net core middleware组成的一个管道。当它拿到请求之后会用一个request builder来构造一个HttpRequestMessage发到下游的真实服务器,等下游的服务返回response之后再由一个middleware将它返回的HttpResponseMessage映射到HttpResponse上。
Ocelot基本使用
项目结构如下:
一个.Net 5的Web Api 项目(地址:localhost,端口:50164),一个作为网关的.Net 5 项目(地址:localhost,端口:8000)。
在作为网关的项目中通过Nuget命令添加最新版的Ocelot, Install-Package Ocelot
首先在.Net 5 网关项目的appsettings.json中添加Ocelot的配置节,如下:
这里需要注意,在Ocelot 15 之前的版本里用“ReRoutes”,之后的版本改成了“Routes”,如果配置错误,网关功能不能生效。
以上配置将网关的地址http://localhost:8000/userservice/XXX 映射为http://localhost:50164/api/XXX。
另外,特别注意一下BaseUrl是我们外部暴露的Url,比如我们的Ocelot运行在http://192.168.10.11的一个地址上,但是前面有一个 nginx绑定了域名http://api.justtest.com,那这里我们的BaseUrl就是 http://api.justtest.com。这里本地测试,都用的localhost。
配置依赖注入与中间件
在startup.cs中我们首先需要引用两个命名空间
接下来就是添加依赖注入和中间件
然后将两个项目配置为多启动项目。启动项目之后,就可以通过网关地址http://localhost:8000/userservice/XXX访问web api项目(http://localhost:50164/api/XXX)下的任何api。