.Net Core 基礎學習筆記(三) Ocelot閘道器配置使用
阿新 • • 發佈:2021-06-24
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> { "service15.新增ocelot 閘道器配置檔案", "service2" }; app .UseSwagger() .UseSwaggerUI(options => { apis.ForEach(m => { options.SwaggerEndpoint($"/{m}/swagger.json", m); }); });//loggerFactory.a(Configuration.GetSection("Logging")); app.UseOcelot().Wait();
{ "ReRoutes": [ { "DownstreamPathTemplate": "/service1/swagger.json", "DownstreamScheme": "http", "ServiceName": "Service1", "LoadBalancerOptions": {6.載入閘道器ocelot配置檔案"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" } } }
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" },