(精华)2020年8月22日 微服务 Ocelot API网关的使用(.net core版)

举报
愚公搬代码 发表于 2021/10/19 01:07:18 2021/10/19
【摘要】 Ocelot 相关地址: https://github.com/ThreeMammals/Ocelot Ocelot 单独使用,可以查看“Ocelot的简单使用”这篇文章 本文接着“Consul服务...

Ocelot 相关地址:

https://github.com/ThreeMammals/Ocelot

Ocelot 单独使用,可以查看“Ocelot的简单使用”这篇文章

本文接着“Consul服务中心”这篇文章,通过cmd运行起“Student”和“Teacher”服务,接下来就是创建网关项目

一、新建webapi项目,命名为“Ocelot_Consul”,去掉HTTPS勾选,不需要Controller,改为控制台方式启动
在这里插入图片描述
二、打开程序包管理器控制台,依次执行命令:

Install-Package Ocelot
Install-Package Ocelot.Provider.Consul
Install-Package Ocelot.Provider.Polly

  
 
  • 1
  • 2
  • 3

在这里插入图片描述
三、在项目根目录下,新建配置文件“ocelot.json”

"LoadBalancer"负载均衡类型:

RoundRobin:轮询机制,循环找到可以用的服务

LeastConnection:最少连接数,跟踪发现现在有最少请求或处理的可用服务

NoLoadBalancer:不使用负载均衡,直接访问第一个发现的可用的服务

{
  "ReRoutes": [
    {
      "DownstreamPathTemplate": "/api/Default/GetList",
      "DownstreamScheme": "http",
      "UpstreamPathTemplate": "/api/v1/Student/GetList",
      "UpstreamHttpMethod": [ "Get" ],
      "ServiceName": "Student",
      "LoadBalancerOptions": {
        "Type": "RoundRobin"
      },
      "UseServiceDiscovery": true
      //  ,
      //"RateLimitOptions": {
      //  "ClientWhitelist": [], //白名单
      //  "EnableRateLimiting": true, //是否限流
      //  "Period": "30s", //指定一个时间
      //  "PeriodTimespan": 10, //多少时间后,可以重新请求。
      //  "Limit": 5 //在Period的指定时间内,最多请求次数
      //}
    },
    {
      "DownstreamPathTemplate": "/api/Default/GetList",
      "DownstreamScheme": "http",
      "UpstreamPathTemplate": "/api/v1/Teacher/GetList",
      "UpstreamHttpMethod": [ "Get" ],
      "ServiceName": "Teacher",
      "LoadBalancerOptions": {
        "Type": "RoundRobin"
      },
      "UseServiceDiscovery": true
    }
  ],

  "GlobalConfiguration": {
    "ServiceDiscoveryProvider": {
      "Host": "127.0.0.1",
      "Port": 8500
    }
  }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

四、在Program.cs的CreateHostBuilder中加入

.ConfigureAppConfiguration(conf => {
    conf.AddJsonFile("ocelot.json", false, true);
})

  
 
  • 1
  • 2
  • 3

在这里插入图片描述
五、找到Startup.cs

在ConfigureServices中加入:

services.AddOcelot().AddConsul().AddPolly();;

  
 
  • 1

在Configure中加入:

app.UseOcelot().Wait();

  
 
  • 1

在这里插入图片描述
六、通过VS启动“Ocelot_Consul”,由于“ocelot.json”配置的对外的路由

“Student”服务的访问地址为:http://localhost:5000/api/v1/Student/GetList

“Teacher”服务的访问地址为:http://localhost:5000/api/v1/Teacher/GetList
在这里插入图片描述
在这里插入图片描述
代码:https://files.cnblogs.com/files/shousiji/Ocelot_Consul.rar
ocelot配置文件详解

*****************************单地址********************************
//{
//  "ReRoutes": [
//    {
//      "DownstreamPathTemplate": "/api/{url}", //服务地址--url变量
//      "DownstreamScheme": "http",
//      "DownstreamHostAndPorts": [
//        {
//          "Host": "localhost",
//          "Port": 5726 //服务端口
//        } //可以多个,自行负载均衡
//      ],
//      "UpstreamPathTemplate": "/T5726/{url}", //网关地址--url变量   //冲突的还可以加权重Priority
//      "UpstreamHttpMethod": [ "Get", "Post" ]
//    }
//  ]
//}

//*****************************多地址多实例********************************
//{
//  "ReRoutes": [
//    {
//      "DownstreamPathTemplate": "/api/{url}", //服务地址--url变量
//      "DownstreamScheme": "http",
//      "DownstreamHostAndPorts": [
//        {
//          "Host": "localhost",
//          "Port": 5726 //服务端口
//        } //可以多个,自行负载均衡
//      ],
//      "UpstreamPathTemplate": "/T5726/{url}", //网关地址--url变量   //冲突的还可以加权重Priority
//      "UpstreamHttpMethod": [ "Get", "Post" ]
//    },
//    {
//      "DownstreamPathTemplate": "/api/{url}", //服务地址--url变量
//      "DownstreamScheme": "http",
//      "DownstreamHostAndPorts": [
//        {
//          "Host": "localhost",
//          "Port": 5727 //服务端口
//        }
//      ],
//      "UpstreamPathTemplate": "/T5727/{url}", //网关地址--url变量
//      "UpstreamHttpMethod": [ "Get", "Post" ]
//    },
//        {
//      "DownstreamPathTemplate": "/api/{url}", //服务地址--url变量
//      "DownstreamScheme": "http",
//      "DownstreamHostAndPorts": [
//        {
//          "Host": "localhost",
//          "Port": 5728 //服务端口
//        }
//      ],
//      "UpstreamPathTemplate": "/T5728/{url}", //网关地址--url变量
//      "UpstreamHttpMethod": [ "Get", "Post" ]
//    }
//  ]
//}

*****************************单地址多实例负载均衡********************************
//{
//  "ReRoutes": [
//    {
//      "DownstreamPathTemplate": "/api/{url}", //服务地址--url变量
//      "DownstreamScheme": "http",
//      "DownstreamHostAndPorts": [
//        {
//          "Host": "localhost",
//          "Port": 5726 //服务端口
//        } //可以多个,自行负载均衡
//        ,
//        {
//          "Host": "localhost",
//          "Port": 5727 //服务端口
//        },
//        {
//          "Host": "localhost",
//          "Port": 5728 //服务端口
//        }
//      ],
//      "UpstreamPathTemplate": "/T5/{url}", //网关地址--url变量   //冲突的还可以加权重Priority
//      "UpstreamHttpMethod": [ "Get", "Post" ],
//      "LoadBalancerOptions": {
//        "Type": "RoundRobin" //轮询      LeastConnection-最少连接数的服务器   NoLoadBalance不负载均衡
//      }
//    }
//  ]
//}


*****************************单地址多实例负载均衡+Consul********************************
//{
//  "ReRoutes": [
//    {
//      "DownstreamPathTemplate": "/api/{url}", //服务地址--url变量
//      "DownstreamScheme": "http",
//      "UpstreamPathTemplate": "/TConsul/{url}", //网关地址--url变量
//      "UpstreamHttpMethod": [ "Get", "Post" ],
//      "ServiceName": "{{consul服务名称}}", //consul服务名称
//      "LoadBalancerOptions": {
//        "Type": "RoundRobin" //轮询      LeastConnection-最少连接数的服务器   NoLoadBalance不负载均衡
//      },
//      "UseServiceDiscovery": true
//    }
//  ],
//  "GlobalConfiguration": {
//    "BaseUrl": "http://127.0.0.1:6299", //网关对外地址
//    "ServiceDiscoveryProvider": {
//      "Host": "localhost",
//      "Port": 8500,
//      "Type": "Consul" //由Consul提供服务发现
//    }
//  }
//}

//*****************************单地址多实例负载均衡+Consul+Polly********************************
{
  "ReRoutes": [
    {
      "DownstreamPathTemplate": "/api/{url}", //服务地址--url变量
      "DownstreamScheme": "http",
      "UpstreamPathTemplate": "/consul/{url}", //网关地址--url变量
      "UpstreamHttpMethod": [ "Get", "Post" ],
      "ServiceName": "{{consul服务名称}}", //consul服务名称
      "LoadBalancerOptions": {
        "Type": "RoundRobin" //轮询      LeastConnection-最少连接数的服务器   NoLoadBalance不负载均衡
      },
      "UseServiceDiscovery": true,
      "QoSOptions": {
        "ExceptionsAllowedBeforeBreaking": 3, //允许多少个异常请求
        "DurationOfBreak": 10000, // 熔断的时间,单位为ms
        "TimeoutValue": 10000 //如果下游请求的处理时间超过多少则自如将请求设置为超时 默认90秒
      }
      //"RateLimitOptions": {
      //  "ClientWhitelist": [], //白名单
      //  "EnableRateLimiting": true,
      //  "Period": "5m", //1s, 5m, 1h, 1d  jeffzhang
      //  "PeriodTimespan": 5, //多少秒之后客户端可以重试
      //  "Limit": 5 //统计时间段内允许的最大请求数量
      //},
      //"FileCacheOptions": {
      //  "TtlSeconds": 10
      //} //"缓存"
    }
  ],
  "GlobalConfiguration": {
    "BaseUrl": "http://127.0.0.1:6299", //网关对外地址
    "ServiceDiscoveryProvider": {
      "Host": "localhost",
      "Port": 8500,
      "Type": "Consul" //由Consul提供服务发现
    },
    //"RateLimitOptions": {
    //  "QuotaExceededMessage": "Too many requests, maybe later? 11", // 当请求过载被截断时返回的消息
    //  "HttpStatusCode": 666 // 当请求过载被截断时返回的http status
    //}
  }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160

文章来源: codeboy.blog.csdn.net,作者:愚公搬代码,版权归原作者所有,如需转载,请联系作者。

原文链接:codeboy.blog.csdn.net/article/details/108150082

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。