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站点

原文地址:https://www.cnblogs.com/myshowtime/p/11653232.html