Asp.Net Core Ocelot
## Asp.Net Core Ocelot
1.1 Ocelot简介
Ocelot是一个用.NET Core实现并且开源的API网关技术,它的功能包括了:路由、请求聚合、服务发现、认证、鉴权、限流熔断、并内置了负载均衡器、Service Fabric、Skywalking等的集成。而且这些功能都只需要简单的配置即可完成。
(1)配置说明
- Routes - 告诉Ocelot如何处理上游的请求
- GlobalConfiguration - 全局配置,此节点的配置允许覆盖Routes里面的配置,你可以在这里进行通用的一些配置信息
- Downstream - 下游服务配置
- UpStream - 上游服务配置
- Aggregates - 服务聚合配置
- ServiceName, LoadBalancer, UseServiceDiscovery - 配置服务发现
- AuthenticationOptions - 配置服务认证
- RouteClaimsRequirement - 配置Claims鉴权
- RateLimitOptions - 限流配置
- FileCacheOptions - 缓存配置
- QosOptions - 服务质量与熔断
- DownstreamHeaderTransform - 头信息转发
1.2 Asp.Net Core使用Ocelot
(1)新建Peng.Core.ApiGateWay,Install-Package Ocelot
这里还是使用Apollo远程配置
<ItemGroup>
<PackageReference Include="Ocelot" Version="18.0.0" />
<PackageReference Include="Com.Ctrip.Framework.Apollo.Configuration" Version="2.6.2" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
</ItemGroup>
(2)注入Ocelot,这里还需要添加Cors
builder.Services.AddOcelot(_configuration);
app.UseOcelot().Wait();
(3)配置网关,服务A,服务B启动的IP
(4)配置Apollo
新建一个NameSpace
ocelotconfig.json
{
"GlobalConfiguration": {
"BaseUrl": "https://localhost:9000/"
},
"Routes": [
{
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": "9001"
}
],
"UpstreamPathTemplate": "/api/a/v1/{controller}",
"DownstreamPathTemplate": "/api/a/v1/{controller}",
"UpstreamHttpMethod": [
"GET",
"POST",
"DELETE",
"PUT",
"OPTIONS"
],
"UseServiceDiscovery": false,
"LoadBalancerOptions": {
"Type": "RoundRobin"
}
},
{
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": "9002"
}
],
"UpstreamPathTemplate": "/api/b/v1/{controller}",
"DownstreamPathTemplate": "/api/b/v1/{controller}",
"UpstreamHttpMethod": [
"GET",
"POST",
"DELETE",
"PUT",
"OPTIONS"
],
"UseServiceDiscovery": false,
"LoadBalancerOptions": {
"Type": "RoundRobin"
}
}
]
}
appsetting.json配置Apollo,这里三个服务配置都一样
{
"Apollo": {
"AppId": "Peng.Core.Service",
"Env": "DEV",
"Namespaces": [ "Shared.json", "ocelotconfig.json" ],
"MetaServer": "http://192.168.188.180:8080",
"ConfigServer": [ "http://192.168.188.180:8080/" ]
}
}
(5)通过网关的IP访问接口