Ocelot快速实践

 

Ocelot快速实践

春光牛牛 yak 春光牛牛 2022-03-27 15:40

 

 

 

Ocelot快速实践

前言

这节介绍.NET Core平台下网关OcelotOcelot是一个使用.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

 

 

 


微信扫一扫
关注该公众号

posted @ 2022-03-27 17:16  春光牛牛  阅读(139)  评论(0编辑  收藏  举报