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