Ocelot的使用(结合Consul实现负载均衡)

继续对之前的项目进行修改

对Gateway项目中的ocelot.json配置文件进行修改,对于负载均衡的轮询模式还是在Ocelot的配置文件中配置的

      "LoadBalancerOptions": {
        "Type": "RoundRobin"
      }

其实只需要Ocelot配置的服务名对应在Consul中有多个服务实例就行了。

{
  "ReRoutes": [
    {
      "UpstreamPathTemplate": "/Service2/{url}",
      "UpstreamHttpMethod": [ "Get", "Post" ],

      "UseServiceDiscovery": true,
      "ServiceName": "demoName",

      "DownstreamPathTemplate": "/api/{url}",
      "DownstreamScheme": "http",
      //"DownstreamHostAndPorts": [
      //  {
      //    "Host": "localhost",
      //    "Port": 5001
      //  }
      //],
      "LoadBalancerOptions": {
        "Type": "RoundRobin"
      }
      //缓存
      //"FileCacheOptions": {
      //  "TtlSeconds": 30, //缓存时间(秒)
      //  "Region": "CacheArea" //缓存区(名称自定义),表示改配置缓存放到哪个区域,可以在配置管理中进行维护
      //}
    }
  ],
  "GlobalConfiguration": {
    "ServiceDiscoveryProvider": {
      "Host": "127.0.0.1",
      "Port": 8500,
      "Type": "Consul" //PollConsul
    }
  }
}

修改Consul中的配置文件

服务名都是demoName但是有两个服务实例

{
  "services": [
    {
      "id": "consul-service-demo1",
      "name": "demoName",
      "tags": [ "demo" ],
      "address": "127.0.0.1",
      "port": 5001,
      "checks": [
        {
          "id": "ApiServiceA_Check",
          "name": "ApiServiceA_Check",
          "http": "http://127.0.0.1:5001/api/Health/Index",
          "interval": "10s",
          "tls_skip_verify": false,
          "method": "GET",
          "timeout": "1s"
        }
      ]
    },
    {
      "id": "consul-service-demo2",
      "name": "demoName",
      "tags": [ "demo" ],
      "address": "127.0.0.1",
      "port": 5002,
      "checks": [
        {
          "id": "ApiServiceB_Check",
          "name": "ApiServiceB_Check",
          "http": "http://127.0.0.1:5002/api/Health/Index",
          "interval": "10s",
          "tls_skip_verify": false,
          "method": "GET",
          "timeout": "1s"
        }
      ]
    }
  ]

}

通过命令consul agent -dev -config-dir=D:\Soft\consul_1.8.5_windows_amd64启动Consul

然后对Service1的webapi项目分别运行在5001和5002端口处

通过http://localhost:8500可以看到

服务demoName就是我们刚才配置的,可以看到有2个实例

点击进去看可以看到,就是我们刚才配置文件上设置的demoName的两个实例

现在我们启动网关程序Gateway,可以通过http://localhost:5000/Service2/values/GetById?id=123访问得到数据,此时我们随便关掉一个实例

但是通过http://localhost:5000/Service2/values/GetById?id=123刚开始可能会有几次访问不通,到Consul界面总出现上面的画面时就又可以访问到数据了。这是因为Consul设置的

为每10s进行一次健康检查,因此10s内访问的话还会去访问到其中刚关掉的某个实例,当Consul通过健康检查检测到某个服务停掉后就会剔除,接下来就会去访问正常的服务了,

所以之后访问又可正常了。

代码:https://gitee.com/sammy520/OcelotDemo

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值