Ocelot-入门

官网:https://ocelot.readthedocs.io/en/latest/

使用步骤

1、安装Nuget:Ocelot
2、注册服务

services.AddOcelot();

3、注册中间件

app.UseOcelot().Wait();

4、添加配置文件ocelot.json

//*****************************单地址单实例********************************
{
  "Routes": [
    {
      "DownstreamPathTemplate": "/{url}", //服务地址--url变量
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "127.0.0.1",
          "Port": 5001 //服务端口
        }
      ],
      "UpstreamPathTemplate": "/order/{url}", //网关地址--url变量
      "UpstreamHttpMethod": [ "Get", "Post" ]
    }
  ]
}

5、添加数据源

builder.Configuration.AddJsonFile("ocelot.json", false, true);

单地址多实例负载均衡

只需要修改配置文件

//*****************************单地址多实例负载均衡********************************
  {
  "Routes": [
    {
      "DownstreamPathTemplate": "/{url}", //服务地址--url变量
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "127.0.0.1",
          "Port": 5001
        },
        {
          "Host": "127.0.0.1",
          "Port": 5002
        },
        {
          "Host": "127.0.0.1",
          "Port": 5003
        }
      ],
            "LoadBalancerOptions": {
              "Type": "RoundRobin" //轮询 //"LeastConnection" //最少连接数的服务器  "NoLoadBalance" //不负载均衡  //"CookieStickySessions" //会话粘滞  //
            },
      "UpstreamPathTemplate": "/order/{url}", //网关地址--url变量
      "UpstreamHttpMethod": [ "Get", "Post" ]
    }
  ]  
} 

缓存

1、安装Nuget:Ocelot.Cache.CacheManager
2、注册缓存服务

using Ocelot.Cache.CacheManager;
builder.Services.AddOcelot().AddCacheManager(x => {
    x.WithDictionaryHandle();//默认存储字典
});

3、配置

 {
  "Routes": [
    {
      "DownstreamPathTemplate": "/{url}", //服务地址--url变量
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "127.0.0.1",
          "Port": 5001
        }
      ],
      "FileCacheOptions": {
        "TtlSeconds": 15, //Second
        "Region": "UserCache" //可以调用Api缓存清理
      },
      "UpstreamPathTemplate": "/order/{url}", //网关地址--url变量
      "UpstreamHttpMethod": [ "Get", "Post" ]
    }
  ]  
}

Polly限流

1、安装Nuget:Ocelot.Provider.Consul
2、注册服务

using Ocelot.Provider.Polly;
builder.Services.AddOcelot().AddPolly();

3、配置

 {
  "Routes": [
    {
      "DownstreamPathTemplate": "/{url}", //服务地址--url变量
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "127.0.0.1",
          "Port": 5001
        }
      ],
      "RateLimitOptions": {
        "ClientWhitelist": [ "fan", "li" ], //白名单 ClientId 区分大小写,http请求头ClientId有fan或li,不限制
        "EnableRateLimiting": true,
        "Period": "15s", //1s, 5m, 1h, 1d
        "PeriodTimespan": 5, //多少秒之后客户端可以重试
        "Limit": 5 //统计时间段内允许的最大请求数量---张队贡献的代码
      },
      "UpstreamPathTemplate": "/order/{url}", //网关地址--url变量
      "UpstreamHttpMethod": [ "Get", "Post" ]
    }
  ]  
}

Consul

1、安装Nughet:Ocelot.Provider.Consul
2、注册服务

builder.Services.AddOcelot().AddConsul();

3、配置

{
  "Routes": [
        {
          "UpstreamPathTemplate": "/order/{url}", //网关地址--url变量
          "UpstreamHttpMethod": [ "Get", "Post" ],

          "UseServiceDiscovery": true,
          "ServiceName": "OrderService", //consul服务名称
          "DownstreamPathTemplate": "/api/{url}", //服务地址--url变量
          "DownstreamScheme": "http",

          "LoadBalancerOptions": {
            "Type": "RoundRobin" //轮询      LeastConnection-最少连接数的服务器   NoLoadBalance不负载均衡
          }
        }
  ],
    "GlobalConfiguration": {
      "ServiceDiscoveryProvider": {
        "Host": "localhost",
        "Port": 8500,
        "Type": "Consul" //由Consul提供服务发现, 每次请求去consul
      }
    }
} 

测试有问题

其他配置(未验证)


//////MVC的路由规则是近水楼台先得月--
////*****************************路由冲突+带权匹配********************************
//{
//  "Routes": [
//    {
//      "DownstreamPathTemplate": "/{url}", //服务地址--url变量
//      "DownstreamScheme": "http",
//      "DownstreamHostAndPorts": [
//        {
//          "Host": "localhost",
//          "Port": 5726 //服务端口
//        }
//      ],
//      "UpstreamPathTemplate": "/{url}", //网关地址--url变量   //冲突的还可以加权重Priority
//      "UpstreamHttpMethod": [ "Get", "Post" ],
//      "Priority": 0 //默认是0 加个1
//    },
//    {
//      "DownstreamPathTemplate": "/api/users/get?id={id}", //服务地址--url变量
//      "DownstreamScheme": "http",
//      "DownstreamHostAndPorts": [
//        {
//          "Host": "localhost",
//          "Port": 5727 //服务端口
//        }
//      ],
//      "UpstreamPathTemplate": "/api/users/get/{id}", //网关地址--url变量   //冲突的还可以加权重Priority
//      "UpstreamHttpMethod": [ "Get", "Post" ],
//      "Priority": 1 //默认是0 加个1
//    },
//    {
//      "DownstreamPathTemplate": "/api/users/{url}?id={id}", //服务地址--url变量
//      "DownstreamScheme": "http",
//      "DownstreamHostAndPorts": [
//        {
//          "Host": "localhost",
//          "Port": 5728 //服务端口
//        }
//      ],
//      "UpstreamPathTemplate": "/api/users/{url}/{id}", //网关地址--url变量   //冲突的还可以加权重Priority
//      "UpstreamHttpMethod": [ "Get", "Post" ],
//      "Priority": 2 //默认是0 加个1
//    }
//  ]
//}

////*****************************单地址多实例负载均衡+Consul********************************
//{
//  "Routes": [
//    {
//      "UpstreamPathTemplate": "/T/{url}", //网关地址--url变量
//      "UpstreamHttpMethod": [ "Get", "Post" ],

//      "DownstreamPathTemplate": "/api/{url}", //服务地址--url变量
//      "DownstreamScheme": "http",

//      "UseServiceDiscovery": true,
//      "ServiceName": "ZhaoxiService", //consul服务名称
//      "LoadBalancerOptions": {
//        "Type": "RoundRobin" //轮询      LeastConnection-最少连接数的服务器   NoLoadBalance不负载均衡
//      }
//    }
//  ],
//  "GlobalConfiguration": {
//    //"BaseUrl": "http://127.0.0.1:6299", //网关对外地址
//    "ServiceDiscoveryProvider": {
//      "Host": "127.0.0.1",
//      "Port": 8500,
//      "Type": "Consul" //由Consul提供服务发现, 每次请求去consul
//    } 
//    //,"ServiceDiscoveryProvider": {
//    //  "Host": "localhost",
//    //  "Port": 8500,
//    //  "Type": "PollConsul", //由Consul提供服务发现,
//    //  "PollingInterval": 1000 //轮询consul,频率毫秒--down掉是不知道的
//    //  //"Token": "footoken"//需要ACL的话
//    //}
//  }
//}


////*****************************单地址+Ids4********************************
//{
//  "Routes": [
//    {
//      "DownstreamPathTemplate": "/api/{url}", //服务地址--url变量
//      "DownstreamScheme": "http",
//      "DownstreamHostAndPorts": [
//        {
//          "Host": "127.0.0.1",
//          "Port": 5726 //服务端口
//        }
//      ],
//      "UpstreamPathTemplate": "/T5726/{url}", //网关地址--url变量
//      "UpstreamHttpMethod": [ "Get", "Post" ],
//      "AuthenticationOptions": {
//        "AuthenticationProviderKey": "UserGatewayKey",
//        "AllowedScopes": []
//      },
//    }
//  ]
//}

//*****************************超时+限流+熔断+降级+Consul+Polly********************************
//{
//  "Routes": [
//    {
//      "DownstreamPathTemplate": "/api/{url}", //服务地址--url变量
//      "DownstreamScheme": "http",
//      "UpstreamPathTemplate": "/T/{url}", //网关地址--url变量
//      "UpstreamHttpMethod": [ "Get", "Post" ],
//      "UseServiceDiscovery": true,
//      "ServiceName": "ZhaoxiService", //consul服务名称
//      "LoadBalancerOptions": {
//        "Type": "RoundRobin" //轮询      LeastConnection-最少连接数的服务器   NoLoadBalance不负载均衡
//      },
//      "RateLimitOptions": {
//        "ClientWhitelist": [ "eleven", "seven" ], //白名单 ClientId 区分大小写
//        "EnableRateLimiting": true,
//        "Period": "5m", //1s, 5m, 1h, 1d
//        "PeriodTimespan": 30, //多少秒之后客户端可以重试
//        "Limit": 5 //统计时间段内允许的最大请求数量---张队贡献的代码
//      }
//      //"AuthenticationOptions": {
//      //  "AuthenticationProviderKey": "UserGatewayKey",
//      //  "AllowedScopes": []
//      //},
//      //"QoSOptions": {
//      //  "ExceptionsAllowedBeforeBreaking": 3, //允许多少个异常请求
//      //  "DurationOfBreak": 10000, // 熔断的时间,单位为ms
//      //  "TimeoutValue": 2000 //单位ms 如果下游请求的处理时间超过多少则自如将请求设置为超时 默认90秒
//      //}
//      //"FileCacheOptions": {
//      //  "TtlSeconds": 15,
//      //  "Region": "UserCache" //可以调用Api清理
//      //}
//    }
//  ],
//  "GlobalConfiguration": {
//    "BaseUrl": "http://127.0.0.1:6299", //网关对外地址
//    "ServiceDiscoveryProvider": {
//      "Host": "127.0.0.1",
//      "Port": 8500,
//      "Type": "Consul" //由Consul提供服务发现
//    },
//    "RateLimitOptions": {
//      "QuotaExceededMessage": "Too many requests, maybe later? 11", // 当请求过载被截断时返回的消息
//      "HttpStatusCode": 666 // 当请求过载被截断时返回的http status
//      //"ClientIdHeader": "client_id" // 用来识别客户端的请求头,默认是 ClientId
//    }
//  }
//}

////*****************************请求聚合Aggregator********************************
//{
//  "Routes": [
//    {
//      "DownstreamPathTemplate": "/api/users/all",
//      "DownstreamScheme": "http",
//      "DownstreamHostAndPorts": [
//        {
//          "Host": "localhost",
//          "Port": 5726 //服务端口
//        } //可以多个,自行负载均衡
//      ],
//      "UpstreamPathTemplate": "/T5726/users/all",
//      "UpstreamHttpMethod": [ "Get", "Post" ],
//      "key": "T5726"
//    },
//    {
//      "DownstreamPathTemplate": "/api/users/all",
//      "DownstreamScheme": "http",
//      "DownstreamHostAndPorts": [
//        {
//          "Host": "localhost",
//          "Port": 5727 //服务端口
//        }
//      ],
//      "UpstreamPathTemplate": "/T5727/users/all",
//      "UpstreamHttpMethod": [ "Get", "Post" ],
//      "key": "T5727"
//    },
//    {
//      "DownstreamPathTemplate": "/api/users/all",
//      "DownstreamScheme": "http",
//      "DownstreamHostAndPorts": [
//        {
//          "Host": "localhost",
//          "Port": 5728 //服务端口
//        }
//      ],
//      "UpstreamPathTemplate": "/T5728/users/all",
//      "UpstreamHttpMethod": [ "Get", "Post" ],
//      "key": "T5728"
//    }
//  ],
//  "Aggregates": [
//    {
//      "RouteKeys": [
//        "T5726",
//        "T5727",
//        "T5728"
//      ],
//      "UpstreamPathTemplate": "/UserAggregator", //如果某个404 是不影响返回,当成null
//      "Aggregator": "CustomUserAggregator" //自定义聚合器
//    }
//  ]
//}


posted @ 2022-04-17 19:56  .Neterr  阅读(292)  评论(0编辑  收藏  举报