• Ocelot网关在.Net Core 的使用


    1.  项目环境

      .Net Core 2.2      Ocelot 13.5.2

    2. 基本使用

    * Nuget 安装 Ocelot , Ocelot.Provider.Polly

    * 修改 Program.cs 

    WebHost.CreateDefaultBuilder(args).ConfigureAppConfiguration((hostingContext,builder) => {
          builder.SetBasePath(hostingContext.HostingEnvironment.ContentRootPath).AddJsonFile("Ocelot.json");
    }).UseStartup<Startup>();

    *  修改Startup.cs

            public void ConfigureServices(IServiceCollection services)
            {
                services.AddOcelot().AddPolly(); 
            }
    
            
            public void Configure(IApplicationBuilder app, IHostingEnvironment env,ILoggerFactory loggerFactory)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }  
    
                app.UseOcelot().Wait(); 
            }

    * 新建 Ocelot.json,内容如下

    {
      "ReRoutes": [
        {
          // - 上游服务配置
          "UpstreamPathTemplate": "/{url}",
          "UpstreamHttpMethod": [ "Get", "Post", "Put", "Delete" ],
    
          // - 下游服务配置
          "DownstreamPathTemplate": "/{url}",
          "DownstreamScheme": "http",
          "DownstreamHostAndPorts": [
            {
              "Host": "localhost",
              "Port": 4001
            },
            {
              "Host": "localhost",
              "Port": 4002
            }
          ],
    
          // - LoadBalancer将决定负载均衡的算法,三种取值
          // RoundRobin:轮流发送
          // LeastConnection:将请求发往最空闲的那个服务器
          // NoLoadBalance:总是发往第一个请求或者是服务发现
          "LoadBalancerOptions": {
            "Type": "RoundRobin"
          },
    
    
          //ClientWhiteList:一个字符串数组,在请求头中包含ClientId=xxx的请求不受限流控制,其中ClientId这个key可以修改,后边会介绍,xxx表示配置的白名单。
          //"EnableRateLimiting:Boolean值,是否启用限流,只有为true时,配置生效。" "Period:限流控制的时间段,可以输入",
          //"1s(1秒),1m(1分),1h(1小时),1d(1天)类似的值,以此类推。" "PeriodTimespan:超过限流限制的次数后,需要等待重置的时间(单位是秒)。",
          //"Limit:在Period时间内最大能访问的数量。" "用一句话描述一下上边的配置:对于除了请求头中包含ClientId=myclient的请求启用限流,1分钟之内该api最多被访问2次,如果已经达到2次,从第2次请求结束起30秒后才能进行下一次访问。",
    
          "RateLimitOptions": {
            "ClientWhitelist": [],
            "EnableRateLimiting": false,
            "Period": "1m",
            "PeriodTimespan": 10,
            "Limit": 3
          },
    
    
          // 熔断  "ExceptionsAllowedBeforeBreaking:允许异常次数,当Ocelot转发给该下游服务连续出现异常次数达到该数字时,Ocelot会进行自动熔断,一段时间内不再向该下游服务转发请求"
          // "DurationOfBreak:熔断时间,单位为ms(毫秒),持续多长时间不向该下游服务转发请求",
          // "TimeoutValue:服务质量配置项,超时时间,单位为ms(毫秒),当Ocelot向下游服务转发请求多长时间后,自动认为该请求超时": null,
    
          "QoSOptions": {
            "ExceptionsAllowedBeforeBreaking": 5,
            "DurationOfBreak": 10000,
            "TimeoutValue": 3000
          }
    
        }
      ],
      "GlobalConfiguration": {
        "BaseUrl": "https://api.mybusiness.com"
      }
    }
    
       

    * 启动网关 和API站点

  • 相关阅读:
    angular 中如何使用自定义组件
    angular组件数据和事件
    angular组件数据
    angular绑定数据
    angular自定义组件
    angular项目目录结构分析
    Angular 开发工具介绍
    从Microsoft.AspNet.Identity看微软推荐的一种MVC的分层架构
    EF How to use context.Set and context.Entry, which ships with EF4.1 ?
    C# 向IQueryable添加一个Include扩展方法
  • 原文地址:https://www.cnblogs.com/myshowtime/p/11653232.html
Copyright © 2020-2023  润新知