You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET中如何合并多个微服务的Ocelot配置文件?

问题描述

我有一个使用Ocelot的.NET项目,现有代码如下:

using Ocelot.DependencyInjection;
using Ocelot.Middleware;

var builder = WebApplication.CreateBuilder(args);
builder.Configuration.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true);

builder.Services.AddOcelot(builder.Configuration);
builder.Services.AddLogging(logging =>
{
    logging.AddConsole(); 
    logging.AddDebug();   
});

builder.Services.AddControllers();

var app = builder.Build();

await app.UseOcelot();
app.Run();

我希望将Ocelot作为所有微服务的入口点,并将不同微服务的路由拆分到不同配置文件中:在ocelot-config文件夹下存放doctors.json、reviews.json,同时src目录下还有ocelot.json。

但当我尝试添加所有配置文件时,只有最后一个生效,后续配置会覆盖之前的内容:

builder.Configuration.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true)
    .AddJsonFile("./ocelot-config/reviews.json", optional: false, reloadOnChange: true)
    .AddJsonFile("./ocelot-config/doctors.json", optional: false, reloadOnChange: true);

请问如何拆分不同微服务的路由配置文件并正确注册所有配置?

解决方案

直接叠加添加JSON配置文件会导致后加载的配置覆盖前一个的同名节点(比如Routes数组会被完全替换),要实现多配置文件的路由合并,需使用Ocelot的配置合并功能,具体步骤如下:

1. 调整主配置文件ocelot.json

主配置文件保留全局配置(如GlobalConfiguration),通过File节点引入其他路由配置文件:

{
  "GlobalConfiguration": {
    "BaseUrl": "https://localhost:5001",
    // 其他全局配置项(如限流、熔断等)
  },
  "File": [
    "./ocelot-config/reviews.json",
    "./ocelot-config/doctors.json"
  ]
}

2. 拆分路由配置文件的格式

每个拆分的配置文件仅需包含对应微服务的Routes数组,无需重复全局配置。例如doctors.json:

{
  "Routes": [
    {
      "DownstreamPathTemplate": "/api/doctors/{everything}",
      "DownstreamScheme": "https",
      "DownstreamHostAndPorts": [
        {
          "Host": "doctors-service",
          "Port": 5002
        }
      ],
      "UpstreamPathTemplate": "/doctors/{everything}",
      "UpstreamHttpMethod": ["Get", "Post"]
    }
  ]
}

reviews.json同理,仅维护对应微服务的路由规则即可。

3. 修改Program.cs代码

仅需加载主ocelot.json,Ocelot会自动读取File节点指定的配置文件并合并所有路由:

using Ocelot.DependencyInjection;
using Ocelot.Middleware;

var builder = WebApplication.CreateBuilder(args);
// 仅加载主配置文件,Ocelot会自动处理引入的子配置
builder.Configuration.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true);

builder.Services.AddOcelot(builder.Configuration);
builder.Services.AddLogging(logging =>
{
    logging.AddConsole(); 
    logging.AddDebug();   
});

builder.Services.AddControllers();

var app = builder.Build();

await app.UseOcelot();
app.Run();

补充说明

  • 若需新增配置文件,直接修改主ocelot.json的File数组即可,Ocelot会因reloadOnChange: true自动刷新配置。
  • 拆分的配置文件路径是相对于主配置文件的位置,需确保路径正确,避免出现文件找不到的情况。

内容的提问来源于stack exchange,提问作者user29547398

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 15:42:34