1. 程式人生 > 其它 >.Net Core 基礎學習筆記(三) Ocelot閘道器配置使用

.Net Core 基礎學習筆記(三) Ocelot閘道器配置使用

1.新增閘道器服務本身 swagger配置
services.AddSwaggerGen(options =>

            {

                options.SwaggerDoc("ApiGateway", new OpenApiInfo { Title = "閘道器服務", Version = "v1" });

            });
2.安裝ocelot包 3.新增ocelot配置
services.AddOcelot().AddConsul();
4.配置閘道器整合swagger選項
 var apis = new List<string> { "service1
", "service2" }; app .UseSwagger() .UseSwaggerUI(options => { apis.ForEach(m => { options.SwaggerEndpoint($"/{m}/swagger.json", m); }); });
//loggerFactory.a(Configuration.GetSection("Logging")); app.UseOcelot().Wait();
5.新增ocelot 閘道器配置檔案
{

  "ReRoutes": [

    {

      "DownstreamPathTemplate": "/service1/swagger.json",

      "DownstreamScheme": "http",

      "ServiceName": "Service1",

      "LoadBalancerOptions": {

        
"Type": "RoundRobin" }, "UseServiceDiscovery": true, "UpstreamPathTemplate": "/service1/swagger.json", "UpstreamScheme": "http", "UpstreamHttpMethod": [ "GET", "POST", "DELETE", "PUT" ] }, { "DownstreamPathTemplate": "/service2/swagger.json", "DownstreamScheme": "http", "LoadBalancer": "RoundRobin", "ServiceName": "Service2", "UseServiceDiscovery": true, "UpstreamPathTemplate": "/service2/swagger.json", "UpstreamScheme": "http", "UpstreamHttpMethod": [ "GET", "POST", "DELETE", "PUT" ] }, { "DownstreamPathTemplate": "/service1/api/{url}", "DownstreamScheme": "http", "LoadBalancerOptions": { "Type": "RoundRobin" }, "ServiceName": "Service1", "UseServiceDiscovery": true, "UpstreamPathTemplate": "/service1/api/{url}", "UpstreamHttpMethod": [ "GET", "POST", "DELETE", "PUT" ] }, { "DownstreamPathTemplate": "/service2/api/{url}", "DownstreamScheme": "http", "LoadBalancer": "RoundRobin", "ServiceName": "Service2", "UseServiceDiscovery": true, "UpstreamPathTemplate": "/service2/api/{url}", "UpstreamHttpMethod": [ "GET", "POST", "DELETE", "PUT" ] } ], "GlobalConfiguration": { "BaseUrl": null, "ServiceDiscoveryProvider": { "Host": "localhost", "Port": 8500, "Type": "Consul" } } }
6.載入閘道器ocelot配置檔案
Program中:
        public static IHostBuilder CreateHostBuilder(string[] args) =>

            Host.CreateDefaultBuilder(args)

                .ConfigureWebHostDefaults(webBuilder =>

                {

                    webBuilder.UseStartup<Startup>();



                    webBuilder.UseUrls("http://localhost:9000");

                })

            .ConfigureAppConfiguration((hostingContext, builder) =>

            {

                builder

                .SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)

                .AddJsonFile("ocelot.json");

            });
7.配置ocelot配置檔案,啟用服務發現,以及請求路由匹配規則,詳見json檔案 8.踩坑點記錄 (1)控制檯報錯:無法匹配上游路徑,檢查配置檔案無問題 解決:Program中手動指定載入ocelot配置配置,見第6步 (2)ocelot 版本為16.0以上時,配置檔案標籤為Routes, 16.0以下時為ReRoutes,測試使用16.0版本 控制檯報錯 無法從程式集載入型別XXX,猜測載入的是16.0之前的配置型別,最後降級至15.0 控制檯不報此錯誤 (3)不啟用服務發現必須指定下游地址,啟用服務發現必須新增服務名 以及服務發現配置。 (4) 服務路由需加服務別名,用於閘道器匹配 請求哪個服務 (5) 負載均衡配置失效 :"LoadBalancer": "RoundRobin",指定本地下游地址也有同樣問題,一樣的解決方式   解決:使用另一種配置寫法: "LoadBalancerOptions": {   "Type": "RoundRobin"   },