zoukankan      html  css  js  c++  java
  • 微服务-网关GateWay,使用Ocelot服务治理(2)

    在微服务中网关必不可缺。网关包含了路由,认证,服务发现,日志记录等等。

    本文通过使用Ocelot创建微服务网关。Ocelot是一个开源的API网关,功能强大,包括路由,负载均衡,请求聚合,认证,鉴权,限流熔断等等,通过配置即可完成。
    在上文微服务-基于Consul的服务注册与发现(1) 中通过Consul实现了服务注册与发现,健康检查,负载均衡功能。
    Ocelot能够集成Consul,组合搭配使用使得项目更加健全。
     
     
    大致操作如下:
    (1)创建空的WebAPI项目MicService.GateWayDemo
    引入Nuget包Ocelot和Ocelot.Provider.Consul
     
    (2)配置
    需要添加一个json文件来添加Ocelot配置,我们新建文件Configuration.json
    最简单的配置如下:
    BaseUrl是我们外部暴露的Url
    {
        "ReRoutes": [],
        "GlobalConfiguration": {
            "BaseUrl": "https://api.mybusiness.com"
        }
    }
    其中必不可少的是这两个根节点:ReRoutesGlobalConfigurationReRoutes是一个数组,每个元素代表一个路由,下面是完整的路由配置和说明:
     1 {
     2   "DownstreamPathTemplate": "/",
     3   "UpstreamPathTemplate": "/",
     4   "UpstreamHttpMethod": [
     5       "Get"
     6   ],
     7   "AddHeadersToRequest": {},
     8   "AddClaimsToRequest": {},
     9   "RouteClaimsRequirement": {},
    10   "AddQueriesToRequest": {},
    11   "RequestIdKey": "",
    12   "FileCacheOptions": {
    13       "TtlSeconds": 0,
    14       "Region": ""
    15   },
    16   "ReRouteIsCaseSensitive": false,
    17   "ServiceName": "",
    18   "DownstreamScheme": "http",
    19   "DownstreamHostAndPorts": [
    20       {
    21           "Host": "localhost",
    22           "Port": 51876,
    23       }
    24   ],
    25   "QoSOptions": {
    26       "ExceptionsAllowedBeforeBreaking": 0,
    27       "DurationOfBreak": 0,
    28       "TimeoutValue": 0
    29   },
    30   "LoadBalancer": "",
    31   "RateLimitOptions": {
    32       "ClientWhitelist": [],
    33       "EnableRateLimiting": false,
    34       "Period": "",
    35       "PeriodTimespan": 0,
    36       "Limit": 0
    37   },
    38   "AuthenticationOptions": {
    39       "AuthenticationProviderKey": "",
    40       "AllowedScopes": []
    41   },
    42   "HttpHandlerOptions": {
    43       "AllowAutoRedirect": true,
    44       "UseCookieContainer": true,
    45       "UseTracing": true
    46   },
    47   "UseServiceDiscovery": false
    48 }
    Downstream是下游服务配置
    UpStream是上游服务配置
    Aggregates 服务聚合配置
    ServiceName, LoadBalancer, UseServiceDiscovery 配置服务发现
    AuthenticationOptions 配置服务认证
    RouteClaimsRequirement 配置Claims鉴权
    RateLimitOptions为限流配置
    FileCacheOptions 缓存配置
    QosOptions 服务质量与熔断
    DownstreamHeaderTransform头信息转发

     
    Configuration.json文件
     1 {
     2   "ReRoutes": [
     3     { 
     4       "DownstreamPathTemplate": "/{url}", //下游请求地址模板
     5       "DownstreamScheme": "http", //请求协议 
     6       "UpstreamPathTemplate": "/{url}",
     7       "UpstreamHttpMethod": [ "Get", "Post" ],
     8       //负载均衡 最少连接数
     9       "LoadBalancerOptions": {
    10         "Type": "LeastConnection"
    11       },
    12       "ServiceName": "MicServiceName", //Consul配置中服务的name名字
    13       "UseServiceDiscovery": true //是否启用服务发现
    14     }
    15   ],
    16   "GlobalConfiguration": {
    17     //Consul服务发现的地址和端口
    18     "ServiceDiscoveryProvider": {
    19       "Host": "localhost",
    20       "Port": 8500
    21     },
    22     "BaseUrl": "http://192.168.1.1:5000"
    23   }
    24 }
    (3)修改Program.cs
     1 public static IHostBuilder CreateHostBuilder(string[] args) =>
     2 Host.CreateDefaultBuilder(args)
     3  .ConfigureAppConfiguration(conf =>
     4  {
     5      conf.AddJsonFile("configuration.json", optional: false, reloadOnChange: true);
     6  })
     7 .ConfigureWebHostDefaults(webBuilder =>
     8 {
     9     webBuilder.UseStartup<Startup>();
    10 });
    (4)修改Startup.cs
     public void ConfigureServices(IServiceCollection services)
    {
        services.AddOcelot().AddConsul();
    }
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseOcelot();//整个进程的管道换成Ocelot
    }
    (5).运行测试
    在上期基础上运行和测试,可以详见:微服务-基于Consul的服务注册与发现(1)
    开启Consul,在安装包文件夹下,输入命令行 consul.exe agent -dev
     
    在项目MicService文件夹下的bin/Debug/netcoreapp3.1中输入命令行如下所示,运行微服务:
    dotnet MicService.dll --urls="http://*:7003" --ip="127.0.0.1" --port=7003 --weight=1 --text="7003"
    dotnet MicService.dll --urls="http://*:7002" --ip="127.0.0.1" --port=7002 --weight=1 --text="7002"
     
    运行MicService.GateWayDemo,其中端口号可在LaunchSettings.json中设置
    通过Postman访问58961端口,会自动映射到7002或7003端口下的接口
     

  • 相关阅读:
    为什么今天的L4无人驾驶无法到达终局(转)
    各种卷积类型Convolution
    关于快速、深入理解需求
    测试注意事项及工作标准
    测试工作指引
    测试验收工作指引
    Jmeter的json提取器使用
    高等数学:第一章 函数与极限
    vscode
    Python模块查找路径
  • 原文地址:https://www.cnblogs.com/ywkcode/p/14172861.html
Copyright © 2011-2022 走看看