网关Ocelot 集成Consul

- Ocelot

一、安装nuget:Ocelot.Provider.Consul

5.png

二、新建配置 ocelot.json

{
  "Routes": [
    {
      "UpstreamPathTemplate":"/api/{url}",//上游访问接口
      "UpstreamHttpMethod": ["Get", "Post", "Put", "Delete"],
      "DownstreamPathTemplate": "/api/{url}",//内部转发接口
      "DownstreamScheme": "http",
      "LoadBalancerOptions": {
        "Type":"RoundRobin"//负载均衡机制轮流发送
      },
      "UseServiceDiscovery": true, //注册到consul开启启用服务发现
      "ServiceName": "EFCoreService",//注册到服务器的名称,这里配置错误会发现不了服务
      //熔断设置
      "QoSOptions": {
        "ExceptionsAllowedBeforeBreaking": 3, //允许异常次数,当Ocelot转发给该下游服务连续出现异常次数达到该数字时,Ocelot会进行自动熔断,一段时间内不再向该下游服务转发请求
        "DurationOfBreak": 5000, // 熔断时间,单位为ms(毫秒),持续多长时间不向该下游服务转发请求
        "TimeoutValue": 5000 //单位ms,如果下游请求的处理时间超过多少则自如将请求设置为超时 默认90秒
      }
    }
  ],
  "GlobalConfiguration": {
    "BaseUrl": "http://localhost:5095",
    "ServiceDiscoveryProvider": {
      "Host": "localhost",
      "Port": 8500,
      "Type": "Consul" // 二选一 根据需要结合站点启动时Program的注册 注册到相关服务
    }
  }
}

三、注入Ocelot 和使用Ocelot

//注入ocelot
builder.Configuration.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true);
builder.Services.AddOcelot().AddConsul().AddPolly();
     
//使用
app.UseOcelot().Wait();

四、访问网关

可以看到访问网关上游地址,已被转发到配置的下游地址

7.png