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

如何在Ocelot的routes数组中添加JSON数组对象以拆分路由配置

Ocelot API网关配置拆分方案

一、拆分独立路由配置文件

为每个微服务创建单独的路由配置文件,命名规则统一为[微服务名称].Routes.json,比如:

  • OrderService.Routes.json
  • UserService.Routes.json
  • 剩余5个微服务同理创建对应文件

每个文件仅存放对应微服务的路由数组,示例(OrderService.Routes.json):

[
  {
    "DownstreamPathTemplate": "/api/orders/{id}",
    "DownstreamScheme": "https",
    "DownstreamHostAndPorts": [
      {
        "Host": "order-service",
        "Port": 443
      }
    ],
    "UpstreamPathTemplate": "/gateway/orders/{id}",
    "UpstreamHttpMethod": ["Get"]
  },
  // 该微服务的其他路由配置...
]

主配置文件ocelot.json保留全局配置(如GlobalConfiguration),清空Routes数组(或仅保留少量全局通用路由):

{
  "GlobalConfiguration": {
    "BaseUrl": "https://your-gateway-domain",
    // 其他全局配置项...
  },
  "Routes": []
}

二、修改Program.cs加载并合并配置

在网关的Program.cs中调整配置加载逻辑,读取所有拆分的路由文件并合并到主配置的Routes数组中,示例代码:

var builder = WebApplication.CreateBuilder(args);

// 加载主Ocelot全局配置
var ocelotConfig = new Ocelot.Configuration.FileConfiguration();
builder.Configuration.GetSection("Ocelot").Bind(ocelotConfig);

// 读取所有微服务路由配置文件
var routeFiles = Directory.GetFiles(builder.Environment.ContentRootPath, "*.Routes.json");
foreach (var file in routeFiles)
{
    var serviceRoutes = builder.Configuration.AddJsonFile(file, optional: false, reloadOnChange: true)
                                           .Get<List<Ocelot.Configuration.FileRoute>>();
    ocelotConfig.Routes.AddRange(serviceRoutes);
}

// 将合并后的配置注入Ocelot
builder.Services.AddOcelot(ocelotConfig);

var app = builder.Build();
app.UseOcelot().Wait();
app.Run();

三、后续维护建议

  • 命名规范:严格遵循[微服务名称].Routes.json命名,快速识别路由所属服务
  • 热重载:保持代码中reloadOnChange: true配置,修改单个服务路由后无需重启网关
  • 配置验证:上线前用ocelot --validate命令批量验证所有配置文件的合法性
  • 版本管理:将所有拆分的配置文件纳入版本控制系统,便于追踪路由变更记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:42:04