1

我正在尝试在不重新启动应用程序的情况下更改 ocelot 配置,并且我不想使用 Consul。试图寻找简单的解决方案。我正在尝试什么。

注册的配置文件为reloadOnChange:true

public Startup(IHostingEnvironment env)
        {
            var builder = new Microsoft.Extensions.Configuration.ConfigurationBuilder();
            builder.SetBasePath(env.ContentRootPath)
                   .AddJsonFile("configuration.json", optional: false, reloadOnChange: true)
                   .AddEnvironmentVariables();

            Configuration = builder.Build();
        }

        public IConfigurationRoot Configuration { get; }

并将配置添加为单例

services.AddSingleton<IConfiguration>(Configuration);

还编写了服务,它使我能够使用服务更改此单例配置。

[Route("api/[controller]")]
    public class XBConfigurationController : Controller
    {
        public XBConfigurationController(IConfiguration configuration)
        {
            _configuration = configuration as IConfigurationRoot;
        }

        private readonly IConfigurationRoot _configuration;

        // GET: /<controller>/
        [HttpGet]
        public IActionResult Get()
        {
            _configuration.Reload();
            return Ok();
        }
    }

怎么了?为什么 ocelot 不刷新它的内部配置?

4

1 回答 1

1

我使用管理 api 解决了我的问题。

services.AddOcelot(Configuration).AddPolly().AddAdministration("/administration", "secret");

并将基本 url 添加到 ocelot 配置文件中。

 "GlobalConfiguration": {
    "RequestIdKey": "OcRequestId",
    "AdministrationPath": "/administration",
    "BaseUrl": "http://localhost:54864"
  }

更改代码后执行此步骤

  1. 使用此服务生成令牌http://localhost:54864/administration/connect/token

  2. 使用此 apihttp://localhost:54864/administration/configurationGet方法获取当前配置Bearer Token

  3. 将修改后的配置设置为此 api 的 json 输入http://localhost:54864/administration/configuration

您可以获得的其他信息

ocelot.postman_collection.json

Ocelot 管理 API 文档

于 2019-11-13T12:50:03.260 回答