.NET Core API閘道器Ocelot(一)【概覽,開始】

風靈使發表於2019-03-02

概覽

Ocelot的目標是使用.NET執行面向微服務/面向服務的架構,需要統一的入口點進入他們的系統。

特別是與IdentityServer引用和承載令牌輕鬆整合。

Ocelot是一組按特定順序排列的中介軟體。

OcelotHttpRequest物件操作到其配置指定的狀態,直到它到達請求構建器中介軟體,在該中介軟體中,它建立一個HttpRequestMessage物件,該物件用於向下遊服務發出請求。發出請求的中介軟體是Ocelot管道中的最後一件事。它不會呼叫下一個中介軟體。來自下游服務的響應儲存在每個請求範圍的儲存庫中,並在請求返回Ocelot管道時進行檢索。有一箇中介軟體將HttpResponseMessage對映到HttpResponse物件並返回給客戶端。基本上它具有許多其他功能。


開始

Ocelot僅適用於.NET Core,目前是為netstandard2.0構建的。 如果Ocelot適合您,那麼這個文件可能會有用。

.NET Core 2.1

使用nuget安裝Ocelot及其依賴項。 您需要建立一個netstandard2.0專案並將其打包到其中。 然後按照下面的“啟動”和“配置”部分啟動並執行。

Install-Package Ocelot

所有版本都可以在這裡找到

配置

以下是一個非常基本的ocelot.json。 它不會做任何事情,但應該讓Ocelot啟動。

{
    "ReRoutes": [],
    "GlobalConfiguration": {
        "BaseUrl": "https://api.mybusiness.com"
    }
}

這裡要注意的最重要的是BaseUrlOcelot需要知道它正在執行的URL,以便進行Header查詢和替換以及某些管理配置。 設定此URL時,它應該是客戶端將看到執行Ocelot的外部URL,例如 如果您正在執行容器,Ocelot可能會在網址http://123.12.1.1:6543上執行,但在https://api.mybusiness.com上響應之前有類似nginx的內容。 在這種情況下,Ocelot基本網址應為https://api.mybusiness.com

如果您正在使用容器並要求Ocelothttp://123.12.1.1:6543響應客戶端,那麼您可以執行此操作,但是如果您要部署多個Ocelot,您可能希望在某種型別指令碼的命令列上傳遞它。希望您使用的任何排程程式都可以通過IP。

Program
然後在您的Program.cs中,您將需要以下內容。 需要注意的主要事項是 AddOcelot()(新增ocelot服務),UseOcelot().Wait()(設定所有Ocelot中介軟體)。

public class Program
{
    public static void Main(string[] args)
    {
         new WebHostBuilder()
            .UseKestrel()
            .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();
            })
            .ConfigureLogging((hostingContext, logging) =>
            {
                //add your logging
            })
            .UseIISIntegration()
            .Configure(app =>
            {
                app.UseOcelot().Wait();
            })
            .Build()
            .Run();
    }
}

.NET Core 1.0

配置

{
    "ReRoutes": [],
    "GlobalConfiguration": {}
}

Program

public class Program
{
    public static void Main(string[] args)
    {
        IWebHostBuilder builder = new WebHostBuilder();

        builder.ConfigureServices(s => {
        });

        builder.UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseStartup<Startup>();

        var host = builder.Build();

        host.Run();
    }
}

Startup

public class Startup
{
    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddJsonFile("ocelot.json")
            .AddEnvironmentVariables();

        Configuration = builder.Build();
    }

    public IConfigurationRoot Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddOcelot(Configuration);
    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseOcelot().Wait();
    }
}

相關文章