Ocelot快速实践
Ocelot快速实践
Ocelot快速实践
前言
这节介绍.NET Core平台下网关Ocelot。Ocelot是一个使用.NET Core平台上的一个开源的API网关,在使用.NET Core开发微服务时通常使用Ocelot作为网关。
环境:VS2019 +.NET5.0 + Ocelot17.0.0.0
1API网关
API网关是一个服务,是系统的唯一入口。它包含有身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。
API 网关一般放到微服务的最前端,并且要让API 网关变成由应用所发起的每个请求的入口。这样就可以明显的简化客户端实现和微服务应用程序之间的沟通方式。所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。通常,网关也是提供REST/HTTP的访问API。
2Ocelot介绍
2.1什么是Ocelot
Ocelot是一个使用.NET Core平台上的一个API Gateway,这个项目的目标是在.NET上面运行微服务架构。Ocelot框架内部集成了IdentityServer(身份验证)和Consul(服务注册发现),还引入了Polly来处理进行故障处理。
源码:https://github.com/ThreeMammals/Ocelot
3Ocelot快速实践
3.1新建接口服务
第1步:新建WebApi项目提供接口数据服务,命名为“Yak.Ocelot.Api”。
第2步:去掉配置HTTPS
第3步:打开launchSettings.json文件,修改端口为6000。
配置如下:
{ "$schema": "http://json.schemastore.org/launchsettings.json", "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:6000", "sslPort": 0 } }, "profiles": { "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "launchUrl": "weatherforecast", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "Yak.Ocelot.Api": { "commandName": "Project", "dotnetRunMessages": "true", "launchBrowser": true, "launchUrl": "weatherforecast", "applicationUrl": "http://localhost:6000", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } } |
第3步:运行接口服务,访问了默认的WeatherForecast接口。
3.2新建Ocelot网关项目
第1步:新建WebApi项目,命名为“Yak.Ocelot.Gateway”。
第2步:去掉配置HTTPS
第3步:打开launchSettings.json文件,修改端口为5000,删除launchUrl
配置如下:
{ "$schema": "http://json.schemastore.org/launchsettings.json", "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:5000", "sslPort": 0 } }, "profiles": { "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "Yak.Ocelot.Gateway": { "commandName": "Project", "dotnetRunMessages": "true", "launchBrowser": true, "applicationUrl": "http://localhost:5000", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } } |
第3步:删除无关文件
3.3配置Ocelot
第1步:Yak.Ocelot.Gateway项目中添加Ocelot的依赖,这里版本选择17.0.0。
第2步:添加Ocelot的配置文件,新建一个Ocelot.json文件。
第3步:添加Ocelot的配置文件,新建一个Ocelot.json文件。
配置如下:
{ "Routes": [ { "DownstreamPathTemplate": "/WeatherForecast", "DownstreamScheme": "http", "DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 6000 } ], "UpstreamPathTemplate": "/Weather", "UpstreamHttpMethod": [ "Get" ] } ], "GlobalConfiguration": { "BaseUrl": "https://localhost:5000" } } |
第4步:修改Program中CreateHostBuilder方法,添加配置读取。
publicstatic IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((context, config) => { config.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseUrls("http://localhost:5000"); webBuilder.UseStartup(); }); |
第5步:修改Startup中ConfigureServices方法。
publicvoid ConfigureServices(IServiceCollection services) { services.AddOcelot(); } |
第6步:修改Startup中Configure方法。
publicvoid Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); }
app.UseRouting();
app.UseEndpoints(endpoints => { endpoints.MapGet("/", async context => { await context.Response.WriteAsync("我是Ocelot网关!"); }); }); app.UseOcelot().Wait(); } |
3.4通过Ocelot网关访问服务接口
第1步:在启动Yak.Ocelot.Api项目情况下,再启动Yak.Ocelot.Gateway项目。
第2步:通过Yak.Ocelot.Gateway网关读取Yak.Ocelot.Api项目提供的天气接口数据。
URL地址:http://localhost:5000/weather
。
4总结
通过上游的UpstreamPathTemplate所设置的“/Weather”映射到下游DownstreamPathTemplate的“/WeatherForecast”接口地址,下游DownstreamScheme使用http协议及6000端口。
本例子主要是简单快速了解Ocelot的应用。后面将会介绍Ocelot主要特性及路由、请求聚合以及服务发现和集成IdentityServer认证以及授权等。
5鸣谢
https://www.cnblogs.com/yilezhu/p/9638417.html
https://www.cnblogs.com/edisonchou/p/api_gateway_ocelot_foundation_01.html
https://www.cnblogs.com/liyouming/p/9020556.html
源码:https://github.com/yandaniugithub/Yak.Ocelot.Demo.git

微信扫一扫
关注该公众号
本文来自博客园,作者:{春光牛牛,yak},转载请注明原文链接:https://www.cnblogs.com/yakniu/p/16063547.html
欢迎各位大佬们评论指正
QQ讨论群:610129902