.Net Core-Ocelot的使用三:服务发现Consul和限流

一、安装Consul

1、官网下载:https://www.consul.io/downloads.html
2、添加环境变量(添加解压后consul.exe在的目录)
在这里插入图片描述

二、运行Consul

1、cmd到Consul安装目录键入命令
consul.exe agent -dev 本地模式,将会使用127.0.0.1 的ip地址
2、浏览器运行:http://localhost:8500/ui/dc1/services
出现下面页面表示启动成功!
在这里插入图片描述
3、注册服务(服务定义)
在Consul安装目录下新建文件夹conf并在其文件件新建配置文件service.json,内容如下

{

  "encrypt": "7TnJPB4lKtjEcCWWjN6jSA==",
  "services": [
    {
      "id": "API001",
      "name": "API001",
      "tags": [ "API001" ],
      "address": "localhost",
      "port": 3003,
      "checks": [
        {
          "id": "API001_Check",
          "name": "API001_Check",
          "http": "http://localhost:3003/health",/*服务的地址*/
          "interval": "10s",
          "tls_skip_verify": false,
          "method": "GET",
          "timeout": "1s"
        }
      ]
    },
    {
      "id": "API002",
      "name": "API002",
      "tags": [ "API002" ],
      "address": "localhost",
      "port": 3004,
      "checks": [
        {
          "id": "API002_Check",
          "name": "API002_Check",
          "http": "http://localhost:3004/health",/*服务的地址*/
          "interval": "10s",
          "tls_skip_verify": false,
          "method": "GET",
          "timeout": "1s"
        }
      ]
    }
  ]
}

4、cmd到Consul安装目录使用命令行标志重新启动代理,以指定配置目录并在代理上启用脚本检查。
consul agent -dev -enable-script-checks -config-dir=./conf
浏览器在运行http://localhost:8500/ui/dc1/services,就会出现配置文件里定义的服务
在这里插入图片描述
如果出现错误,可能是http配置的服务地址配置错误
在这里插入图片描述

三、Ocelot的配置

1、NuGet安装:Ocelot.Provider.Consul
2、添加引用
using Ocelot.Provider.Consul;

Ocelot可以查看你的服务发现,并找到它应该转发下游请求的服务。它可以在这些服务之间进行负载平衡。

1、在Program中BuildWebHost的ConfigureServices方法中添加一行代码

s.AddOcelot()
    .AddConsul();

2、在Ocelot.Json中GlobalConfiguration添加以下配置

    "ServiceDiscoveryProvider": { //如果未指定主机和端口,将使用Consul默认值
      "Host": "localhost",
      "Port": 60184,
      "Type": "Consul"
    }

3、在Ocelot.Json中ReRoutes添加以下配置

//服务发现设置:Ocelot将从服务发现提供程序中查找下游主机和端口,并在所有可用服务中进行负载平衡请求。
      "ServiceName": "product", //告诉Ocelot ReRoutes是使用服务发现提供者作为其主机和端口
      "LoadBalancerOptions": {
        "Type": "LeastConnection"
      }

设置后,Ocelot将从服务发现提供程序中查找下游主机和端口,并在所有可用服务中进行负载平衡请求。

四、限流

ocelot 配置,在ReRoutes中加入

"RateLimitOptions": {
        "ClientWhitelist": [], //客户端白名单
        "EnableRateLimiting": true, //指定启用端点速率限制
        "Period": "1m", //指定限制所适用的期间
        "PeriodTimespan": 15, //指定可以在一定秒数后重试
        "Limit": 5 //指定客户端在定义的时间内可以发出的最大请求数
      }

五、最终Ocelot.json

{
  "ReRoutes": [
    {
      "DownstreamPathTemplate": "/api/{everything}",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 3003
        }
      ],
      "UpstreamPathTemplate": "/API001/{everything}",
      "UpstreamHttpMethod": [ "Get" ],
      //服务发现设置:Ocelot将从服务发现提供程序中查找下游主机和端口,并在所有可用服务中进行负载平衡请求。
      "ServiceName": "API001", //告诉Ocelot ReRoutes是使用服务发现提供者作为其主机和端口
      "UseServiceDiscovery": true,
      "LoadBalancerOptions": { //负载均衡
        "Type": "RoundRobin" //LeastConnection
      },
      "RateLimitOptions": {
        "ClientWhitelist": [], //客户端白名单
        "EnableRateLimiting": true, //指定启用端点速率限制
        "Period": "1m", //指定限制所适用的期间
        "PeriodTimespan": 15, //指定可以在一定秒数后重试
        "Limit": 5 //指定客户端在定义的时间内可以发出的最大请求数
      }
    },
    {
      "DownstreamPathTemplate": "/api/{everything}",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 3004
        }
      ],
      "UpstreamPathTemplate": "/API002/{everything}",
      "UpstreamHttpMethod": [ "Get" ],
      //服务发现设置:Ocelot将从服务发现提供程序中查找下游主机和端口,并在所有可用服务中进行负载平衡请求。
      "ServiceName": "API002", //告诉Ocelot ReRoutes是使用服务发现提供者作为其主机和端口
      "UseServiceDiscovery": true,
      "LoadBalancerOptions": { //负载均衡
        "Type": "RoundRobin" //LeastConnection
      },
      "RateLimitOptions": {
        "ClientWhitelist": [], //客户端白名单
        "EnableRateLimiting": true, //指定启用端点速率限制
        "Period": "1m", //指定限制所适用的期间
        "PeriodTimespan": 15, //指定可以在一定秒数后重试
        "Limit": 5 //指定客户端在定义的时间内可以发出的最大请求数
      }
    }
  ],
  "GlobalConfiguration": {
    "BaseUrl": "http://localhost:1000",
    "servicediscoveryprovider": { //如果未指定主机和端口,将使用consul默认值
      "host": "localhost",
      "port": 8500,
      "type": "consul"
    },
    "RateLimitOptions": { //限流
      "DisableRateLimitHeaders": false, //指定是否禁用X-Rate-Limit和Retry-After标头
      "QuotaExceededMessage": "操作太快!", //指定超出的消息
      "HttpStatusCode": 999, //指定返回的HTTP状态代码
      "ClientIdHeader": "Test" //指定应用于标识客户端的标头。默认情况下为“ ClientId”
    }
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值