• Ocelot的学习


    Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由、认证、鉴权、简单缓存、限流熔断、负载均衡器等。简单的来说Ocelot是一堆的asp.net core middleware组成的一个有顺序的管道。当它拿到请求之后会用一个request builder来构造一个HttpRequestMessage发到下游的真实服务器,等下游的服务返回response之后再由一个middleware将它返回的HttpResponseMessage映射到HttpResponse上。

    项目描述

    > 1. 这是一个ASP.NET Core Web项目,主要展示Ocelot的使用
    > 2. 实现Ocelot来控制访问
    > 3. 实现Ocelot来控制负载均衡

    项目架构

    // OcelotStudy项目
    namespace OcelotInput
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                CreateWebHostBuilder(args).Build().Run();
            }
    
            public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
                WebHost.CreateDefaultBuilder(args)
                  .ConfigureAppConfiguration((hostingContext, config) =>
                  {
                      config
                          .SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
                          .AddJsonFile("ocelotsettings.json", true, true)
                          .AddEnvironmentVariables();
                  })
                  .UseStartup<Startup>();
        }
    }
    
    namespace OcelotInput
    {
        public class Startup
        {
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddOcelot();
            }
    
            public void Configure(IApplicationBuilder app, IHostingEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
    
                app.UseOcelot().Wait();
            }
        }
    }

    其他两个是asp.net core api的项目,vs直接创建就可以

    Ocelot配置

    {
      "ReRoutes": [
        {
          "DownstreamPathTemplate": "/values/{action}", //下游服务配置
          "DownstreamScheme": "http",
          "DownstreamHostAndPorts": [
            {
              "Host": "localhost",
              "Port": 54679
            },
            {
              "Host": "localhost",
              "Port": 57417
            }
          ],
          "UpstreamPathTemplate": "/values/{action}", //上游服务配置
          "UpstreamHttpMethod": [
            "Get"
          ],
          //"AddHeadersToRequest": {},
          //"AddClaimsToRequest": {},
          //"RouteClaimsRequirement": {},  //配置Claims鉴权
          //"AddQueriesToRequest": {},
          //"RequestIdKey": "",
          //"FileCacheOptions": {  //缓存配置
          //  "TtlSeconds": 0,
          //  "Region": ""
          //},
          //"ReRouteIsCaseSensitive": false,
          //"ServiceName": "",
          //"QoSOptions": {   //服务质量与熔断
          //  "ExceptionsAllowedBeforeBreaking": 3,
          //  "DurationOfBreak": 10,
          //  "TimeoutValue": 5000
          //},
          "LoadBalancerOptions": {
            "Type": "LeastConnection"
          } //LoadBalancer将决定负载均衡的算法,LeastConnection – 将请求发往最空闲的那个服务器,RoundRobin – 轮流发送,NoLoadBalance – 总是发往第一个请求或者是服务发现
          //"RateLimitOptions": {  //为限流配置
          //  "ClientWhitelist": [],
          //  "EnableRateLimiting": false,
          //  "Period": "",
          //  "PeriodTimespan": 0,
          //  "Limit": 0
          //},
          //"AuthenticationOptions": {  //配置服务认证
          //  "AuthenticationProviderKey": "",
          //  "AllowedScopes": []
          //},
          //"HttpHandlerOptions": {
          //  "AllowAutoRedirect": false,
          //  "UseCookieContainer": false
          //  //"UseTracing": true
          //}
          //"UseServiceDiscovery": false,  // 配置服务发现
        }
        //{
        //  "DownstreamPathTemplate": "/{url}",
        //  "DownstreamScheme": "https",
        //  "DownstreamHostAndPorts": [
        //    {
        //      "Host": "localhost",
        //      "Port": 80
        //    }
        //  ],
        //  "UpstreamPathTemplate": "/{url}",
        //  "UpstreamHttpMethod": [ "Get" ]
        //}
      ]
      //"Aggregates": [ //服务聚合配置
      //  {
      //    "ReRouteKeys": [
      //      "Tom",
      //      "Laura"
      //    ],
      //    "UpstreamPathTemplate": "/"
      //  }
      //]
    }

    运行效果

    Web1项目:http://localhost:54679,    Web2项目:http://localhost:57417,     Ocelot项目:http://localhost:57083

    源码地址

    https://github.com/jasonhua95/samll-project/tree/master/OcelotStudy

  • 相关阅读:
    【Python】异常处理
    【Python】写入文件
    【Python】从文件中读取数据
    【Python】导入类
    【Python】继承
    【Python】使用类和实例
    SQL HAVING
    SQL GROUP BY
    SQL ORDER BY
    SQL CREATE INDEX
  • 原文地址:https://www.cnblogs.com/zhao123/p/10562765.html
Copyright © 2020-2023  润新知