其他分享
首页 > 其他分享> > .net ocelot网关入门操作

.net ocelot网关入门操作

作者:互联网

记录微服务的搭建过程

介绍

Ocelot是一个用.NET Core实现且开源的网关,只需要配置配置就能完成路由、请求聚合、服务发现、认证、鉴权、限流熔断、并内置了负载均衡器与Service Fabric、Butterfly Tracing集成等功能。下面我会对这些功能的配置和说明。

ocelot的安装

在这里插入图片描述
选择第一个根据自己的vs选择不同的版本

ocelot的搭建过程

配置startup
using一下命名空间
using Ocelot.DependencyInjection;
using Ocelot.Middleware;
在这里插入图片描述
新建一个配置文件
当然你也可以把配置信息写在appsettings.json里面
在这里插入图片描述
配置完后需要在program进行注册
在这里插入图片描述
额外补一点配置文件的优先级
自定义配置文件>命令行>环境(launchSettings)>appsettings>UseSetting

ocelot配置文件介绍

 {
  "ReRoutes": [
  ],//路由配置
  "GlobalConfiguration": {} //全局配置
}

路由ReRoutes基本配置
假设我的网关地址是 www.wangguan.vip/post/test/get?id=3
他会转发到路由 http://127.0.0.1:5005/api/test/get?id=3
或者是http://127.0.0.1:5006/api/test/get?id=3

{
  "ReRoutes": [
    {
      "DownstreamPathTemplate": "/api/{postId}", //下游(指访问服务的接口)
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "127.0.0.1",
          "Port": 5005
        },
        {
          "Host": "127.0.0.1",
          "Port": 5006
        }
      ],
       "LoadBalancer": "LeastConnection ", //负载均衡策略
      "UpstreamPathTemplate": "/post/{postId}", //上游也就是用户输入的请求Url模板
      "UpstreamHttpMethod": [ "Get" ], //上游请求http方法,可使用数
      "Priority":1,//优先级
    }
  ],
  "GlobalConfiguration": {}
}

优先级

{
"ReRoutes": [
    {
      "UpstreamPathTemplate": "/post/{postId}", 
      "Priority":0,//优先级
    }
    {
      "UpstreamPathTemplate": "/post/test/get", 
      "Priority":1,//优先级
    }
  ],
}

如果路由模板出现了冲突 优先级越大的会先被匹配
负载均衡策略(本次会使用consul做服务注册与发现)
DownstreamHostAndPorts存在多个hostandports 则可以分配一下匹配策略

请求聚合
就是把多个响应的结果一次性返回给客户端

{
  "ReRoutes": [
   
    {
      "DownstreamPathTemplate": "/api/test/GetUserInfo",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "127.0.0.1",
          "Port": 5005
        }
      ],

      "UpstreamPathTemplate": "/GetUserInfo", //上游也就是用户输入的请求Url模板
      "UpstreamHttpMethod": [ "Get" ], //游请求http方法,可使用数
      "Key": "GetUserInfo"
    },
    {
      "DownstreamPathTemplate": "/api/test/GetUserIntegral",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "127.0.0.1",
          "Port": 5006
        }
      ],

      "UpstreamPathTemplate": "/GetUserIntegral", //上游也就是用户输入的请求Url模板
      "UpstreamHttpMethod": [ "Get" ], //游请求http方法,可使用数
      "Key": "GetUserIntegral"
    }
  ],
    "Aggregates": [
    {
      "ReRouteKeys": [
        "GetUserInfo",
        "GetUserIntegral"
      ],
      "UpstreamPathTemplate": "/GetUserInfoAndIntegral" //上游模板
    }
  ],
  "GlobalConfiguration": {}

在路由中需要用Key来标记且在Aggregates添加一个匹配模板
这边我将演示客户端获取用户信息和用户积分
单独请求获取用户信息接口和用户接口接口
在这里插入图片描述
在这里插入图片描述
使用请求集合得到的接口
在这里插入图片描述
显然 把2个接口的数据合并到一个请求返回
注意

限流
限制某个接口访问的频率,来减少服务器的压力,或者并行带来的数据错乱

{
  "ReRoutes": [
    {
      "DownstreamPathTemplate": "/api/{postId}",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "127.0.0.1",
          "Port": 5005
        }

      ],
      "RateLimitOptions": {
        "ClientWhitelist": [],
        "EnableRateLimiting": true,
        "Period": "5m",
        "PeriodTimespan": 100,
        "Limit": 1
      },
      "UpstreamPathTemplate": "/post/{postId}", //上游也就是用户输入的请求Url模板
      "UpstreamHttpMethod": [ "Get" ] //游请求http方法,可使用数
    }
 
  ],
  "GlobalConfiguration": {
   
  }
}

  "QoSOptions": {
      "ExceptionsAllowedBeforeBreaking": 5,
      "DurationOfBreak": 5,
      "TimeoutValue": 5000
    }

标签:网关,UpstreamPathTemplate,请求,0.1,ocelot,http,net,模板
来源: https://blog.csdn.net/qq_41990222/article/details/112565541