API 在 .NET 6 上使用 Ocelot 的网关 docker 容器 - 无法使其工作

API Gateway using Ocelot on .NET 6 docker container - unable to make it work

我对微服务架构还很陌生,并且手动启动了我自己的 api-gateway,它可以正常工作,但通过研究,我意识到使用 Ocelot 作为替代品的价值在于它带来的功能。今天我创建了一个新的空 .NET 6 api-gateway 项目,并使用 Ocelot 文档引入了设置它所需的 nuget 包。最终游戏是使用 Eureka,但由于我似乎无法让它工作,所以我退后一步,首先使用直接调用基于 docker 的微服务。

查看文档,我想我已经严格遵守了,但是当我启动容器时它什么也没做,我想知道是否有人可以指出正确的方向。

我的program.cs

using Ocelot.DependencyInjection;
using Ocelot.Middleware;

var builder = WebApplication.CreateBuilder(args);

builder.Host.UseContentRoot(Directory.GetCurrentDirectory())
    .ConfigureAppConfiguration((hostingContext, config) =>
    {
        config
            .SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
            .AddJsonFile("appsettings.json", true, true)
            .AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", true, true)
            .AddJsonFile("ocelot.json")
            .AddEnvironmentVariables();
    })
    .ConfigureServices(s =>
    {
        s.AddOcelot();
        //.AddEureka();
    });

var app = builder.Build();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
});
app.UseOcelot().Wait();

app.Run();

我的ocelot.json

{
  "Routes": [
    // drugService API
    {
      "DownstreamPathTemplate": "/api/TerminologyServices/SearchDrugs/{filter}",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "drugservice",
          "Port": "80"
        }
      ],
      "UpstreamPathTemplate": "/TerminologyServices/SearchDrugs/{filter}",
      "UpstreamHttpMethod": [ "Get" ]
    }
  ],
  "GlobalConfiguration": {
      "BaseUrl": "https://localhost:5003"
  }
}
'''

在这种情况下 docker compose yaml 使用的容器名称替换 localhost web.api.gateway 解决了这个问题。