オセロット(A) - ネットコアオープンソースゲートウェイ

オセロット - ネットコアオープンソースゲートウェイ

著者:markjiang7m2
元のアドレス:https://www.cnblogs.com/markjiang7m2/p/10857688.html
ソースアドレス:https://gitee.com/Sevenm2/OcelotDemo

あなたはオセロットは、オープンソース・プロジェクトWebAPIの.NETコアに基づいてサービスゲートウェイで今日導入付け、それはルーティング、集約要求を含む、非常に強力な、サービスは、その証明書認証、電流制限、負荷分散やその他の機能を発見しています。これらの機能は、設定ファイルのJSONを変更することで、直接、非常に便利に使用することができます。オセロットは、エントリの要求への外部被ばくのシステムであり、すべての外部インタフェースは、下流のこのゲートウェイを介してAPIへのリクエストを行うために地下鉄のセキュリティシステムのように、誰もが地下鉄を取るために、セキュリティチェックを通過する必要がありますする必要があります。

私は1つのオセロットの機能により、1を開始するつもりだ特定の例で示されており、この記事では、完全なコードを含む場合は、すべての私のコードリポジトリからダウンロードすることができます。

構築するためのオセロットプロジェクト

.NETコアに基づいてVS2017して、新しいプロジェクトを作成しWEBAPI、その後、nugetダイレクトを検索Ocelot、参照オセロットを追加するか、次のコマンドを使用して行。

Install-Package Ocelot

プロジェクトのルートディレクトリに追加.json設定ファイル、カスタムのファイル名が、この場合は、次のような構成がある追加Ocelot.jsonです。

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

あなたは私たちのコンフィギュレーションファイルに含まれる2つの設定項目を見ることができ、再ルーティングは、サーバーの構成をルーティング含まれますアレイは、GlobalConfigurationは、グローバルコンフィギュレーション項目です。私は、特定の構成項目で詳述例さまざまな方法と、一時的な説明を展開するので、ここでは、次のようにコンテンツを使用する方法を渡します。
設定ファイルは、.NETのコアの構成に追加される
のProgram.cs

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((hostingContext, builder) => {
            builder.AddJsonFile("Ocelot.json");
        })
        .UseStartup<Startup>();

設定ファイルがリロード変更された.NETコアサポートので、私たちはサポートをリロードする必要がある場合は、次のように変更することができるよう:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((hostingContext, builder) => {
            builder.AddJsonFile("Ocelot.json", optional: false, reloadOnChange: true);
        })
        .UseStartup<Startup>();

オセロットがミドルウェアとして登録されます、我々は2つの名前空間を追加する必要があります
Startup.cs

using Ocelot.DependencyInjection;
using Ocelot.Middleware;
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    services.AddOcelot();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseMvc();
    app.UseOcelot().Wait();
}

この時点で、私たちのオセロットは完了して設定されています。我々は、関連する関数を使用して設定を変更する方法を説明するために以下の具体的な実施例を採用しました。

設定パラメータが導入します

私たちは、パラメータ、ならびにこれらのパラメータの意味は終わりに含まれているかを理解するために最初に見えます。再ルーティングとGlobalConfiguration:以前の私たちは、設定ファイルに導入しているが、2つの設定項目が含まれています。
さんはGlobalConfigurationを見てみましょう、それは通常、我々はこの構成アイテムに属性を追加する必要があり、グローバルコンフィギュレーション項目でBaseUrl、BASEURLサービスオセロットは、URLの外部に露出されます。

"GlobalConfiguration": {
    "BaseUrl": "http://localhost:4727"
}

再ルーティングは、各要素がルートを表す配列であり、経路は次のようにすべての構成パラメータは含まれています。

{
    "DownstreamPathTemplate": "/",
    "UpstreamPathTemplate": "/",
    "UpstreamHttpMethod": [
        "Get"
    ],
    "AddHeadersToRequest": {},
    "AddClaimsToRequest": {},
    "RouteClaimsRequirement": {},
    "AddQueriesToRequest": {},
    "RequestIdKey": "",
    "FileCacheOptions": {
        "TtlSeconds": 0,
        "Region": ""
    },
    "ReRouteIsCaseSensitive": false,
    "ServiceName": "",
    "DownstreamScheme": "http",
    "DownstreamHostAndPorts": [
        {
            "Host": "localhost",
            "Port": 8001,
        }
    ],
    "QoSOptions": {
        "ExceptionsAllowedBeforeBreaking": 0,
        "DurationOfBreak": 0,
        "TimeoutValue": 0
    },
    "LoadBalancer": "",
    "RateLimitOptions": {
        "ClientWhitelist": [],
        "EnableRateLimiting": false,
        "Period": "",
        "PeriodTimespan": 0,
        "Limit": 0
    },
    "AuthenticationOptions": {
        "AuthenticationProviderKey": "",
        "AllowedScopes": []
    },
    "HttpHandlerOptions": {
        "AllowAutoRedirect": true,
        "UseCookieContainer": true,
        "UseTracing": true
    },
    "UseServiceDiscovery": false
}
  • ダウンストリームダウンストリームサービスの設定
  • 上流の上流のサービス構成
  • 集約サービスのアグリゲーション設定
  • ServiceNameは、ロードバランサ、UseServiceDiscovery構成サービスの発見
  • AuthenticationOptions認証サービス
  • RouteClaimsRequirementクレーム認証の設定
  • 設定を制限RateLimitOptions
  • FileCacheOptionsキャッシュの設定
  • QosOptions質の高いサービスとヒューズ設定
  • DownstreamHeaderTransformヘッダの転送設定

もちろん、我々は唯一の実際のニーズに応じて設定される必要があり、実際に使用されているすべてのパラメータを設定する必要はありません。

道によるケース

オセロットルートは、最も基本的な機能です。上流のサービスからの要求を受けたオセロットは、サービス要求が下流に転送され、検証されているので、我々は最初のダウンストリームサービスパラメータでそれらをルーティングを設定しなければなりません。

{
    "DownstreamPathTemplate": "/api/ocelot/{Id}",
    "DownstreamScheme": "http",
    "DownstreamHostAndPorts": [
            {
                "Host": "localhost",
                "Port": 8001,
            }
        ],
    "UpstreamPathTemplate": "/ocelot/{Id}",
    "UpstreamHttpMethod": ["Get"]
}
  • URLテンプレート下流DownstreamPathTemplate要求、{}動的パラメータを表すの内容
  • DownstreamScheme下流サービスのhttpスキーム
  • アドレスDownstreamHostAndPorts下流のサービスは、ロードバランサあれば、ここであなたは数を記入することができます
  • UpstreamPathTemplate上流の要求は、ユーザテンプレートURLが入力され
  • UpstreamHttpMethod上流のHTTPリクエストメソッド、アレイを使用することができます

したがって、サービスアドレスに上流ときにhttp://localhost:4727/ocelot/5要求に応じては、下流オセロットサービスに要求を転送しますhttp://localhost:8001/api/ocelot/5
この場合は下流サービスのデモを提供- OcelotDownAPIを、IISポートに使用することができますOcelotDownAPIを公開します。ダウンストリームサービスは、自分自身を識別するための要求を受信した後の文字列を返します。

[HttpGet("{id}")]
public async Task<IActionResult> Get(int id)
{
    var result = await Task.Run(() =>
    {
        return $"This is from {HttpContext.Request.Host.Value}, path: {HttpContext.Request.Path}";
    });
    return Ok(result);
}

テスト結果:
Ocelot_001_routing1.png

すべての要求を転送するオセロットを必要に応じて、次のように構成することができます。

{
    "DownstreamPathTemplate": "/{url}",
    "DownstreamScheme": "http",
    "DownstreamHostAndPorts": [
            {
                "Host": "localhost",
                "Port": 8001,
            }
        ],
    "UpstreamPathTemplate": "/{url}",
    "UpstreamHttpMethod": ["Get"]
}

このすべてが下流サービスに要求を転送することができます取得します。しかし、この構成の優先順位が他のルーティングテンプレートに一致したら、最低である、を優先させて頂きます。

オセロットホストから前方にのみ特定上流のサービス要求を、所望であれば、次のように構成することができます。

{
    "DownstreamPathTemplate": "/{url}",
    "DownstreamScheme": "http",
    "DownstreamHostAndPorts": [
            {
                "Host": "localhost",
                "Port": 8001,
            }
        ],
    "UpstreamPathTemplate": "/{url}",
    "UpstreamHttpMethod": ["Get"],
    "UpstreamHost": "localhost:4023"
}

4023要求:オセロットはそのような今後ローカルホストから来ます。構成は、2つの他のルートが含まれている場合、なおUpstreamHost、すなわち、とつのルーティングを除いて同一でありUpstreamHost、次いで、オセロットと好みがなく、他のUpstreamHost経路。

優先ルートを設定します。私たちは、定義することができますReRoutes応答の優先ルーティング配列を。0は最も低い優先順位、より多く、より高い優先度です。

[
{
    "UpstreamPathTemplate": "/ocelot/{Id}"
    "Priority": 0
},
{
    "UpstreamPathTemplate": "/ocelot/10"
    "Priority": 1
},
]

概要

本論文では、オセロットの機能とゲートウェイの基本的なアプリケーションを構築する方法についての簡単なケースを説明し、そしてオセロットオセロットの。すべての場合は、同じ記事に配置された場合オセロットが読みやすいではない、過度の長さの原因となります、非常に強力ですが、私はオセロット機能のための一連の記事を書きますので、我々はあなたが参加していきたいと考えています。

参照は、
侵害は、変更または削除された連絡してください場合には、製造プロセスまたは次の文書の一部を参照して本明細書に引用します。
https://www.cnblogs.com/jesse2013/p/net-core-apigateway-ocelot-docs.html

オセロット - ネットコアオープンソースゲートウェイ

著者:markjiang7m2
元のアドレス:https://www.cnblogs.com/markjiang7m2/p/10857688.html
ソースアドレス:https://gitee.com/Sevenm2/OcelotDemo

あなたはオセロットは、オープンソース・プロジェクトWebAPIの.NETコアに基づいてサービスゲートウェイで今日導入付け、それはルーティング、集約要求を含む、非常に強力な、サービスは、その証明書認証、電流制限、負荷分散やその他の機能を発見しています。これらの機能は、設定ファイルのJSONを変更することで、直接、非常に便利に使用することができます。オセロットは、エントリの要求への外部被ばくのシステムであり、すべての外部インタフェースは、下流のこのゲートウェイを介してAPIへのリクエストを行うために地下鉄のセキュリティシステムのように、誰もが地下鉄を取るために、セキュリティチェックを通過する必要がありますする必要があります。

私は1つのオセロットの機能により、1を開始するつもりだ特定の例で示されており、この記事では、完全なコードを含む場合は、すべての私のコードリポジトリからダウンロードすることができます。

構築するためのオセロットプロジェクト

.NETコアに基づいてVS2017して、新しいプロジェクトを作成しWEBAPI、その後、nugetダイレクトを検索Ocelot、参照オセロットを追加するか、次のコマンドを使用して行。

Install-Package Ocelot

プロジェクトのルートディレクトリに追加.json設定ファイル、カスタムのファイル名が、この場合は、次のような構成がある追加Ocelot.jsonです。

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

あなたは私たちのコンフィギュレーションファイルに含まれる2つの設定項目を見ることができ、再ルーティングは、サーバーの構成をルーティング含まれますアレイは、GlobalConfigurationは、グローバルコンフィギュレーション項目です。私は、特定の構成項目で詳述例さまざまな方法と、一時的な説明を展開するので、ここでは、次のようにコンテンツを使用する方法を渡します。
設定ファイルは、.NETのコアの構成に追加される
のProgram.cs

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((hostingContext, builder) => {
            builder.AddJsonFile("Ocelot.json");
        })
        .UseStartup<Startup>();

設定ファイルがリロード変更された.NETコアサポートので、私たちはサポートをリロードする必要がある場合は、次のように変更することができるよう:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((hostingContext, builder) => {
            builder.AddJsonFile("Ocelot.json", optional: false, reloadOnChange: true);
        })
        .UseStartup<Startup>();

オセロットがミドルウェアとして登録されます、我々は2つの名前空間を追加する必要があります
Startup.cs

using Ocelot.DependencyInjection;
using Ocelot.Middleware;
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    services.AddOcelot();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseMvc();
    app.UseOcelot().Wait();
}

この時点で、私たちのオセロットは完了して設定されています。我々は、関連する関数を使用して設定を変更する方法を説明するために以下の具体的な実施例を採用しました。

設定パラメータが導入します

私たちは、パラメータ、ならびにこれらのパラメータの意味は終わりに含まれているかを理解するために最初に見えます。再ルーティングとGlobalConfiguration:以前の私たちは、設定ファイルに導入しているが、2つの設定項目が含まれています。
さんはGlobalConfigurationを見てみましょう、それは通常、我々はこの構成アイテムに属性を追加する必要があり、グローバルコンフィギュレーション項目でBaseUrl、BASEURLサービスオセロットは、URLの外部に露出されます。

"GlobalConfiguration": {
    "BaseUrl": "http://localhost:4727"
}

再ルーティングは、各要素がルートを表す配列であり、経路は次のようにすべての構成パラメータは含まれています。

{
    "DownstreamPathTemplate": "/",
    "UpstreamPathTemplate": "/",
    "UpstreamHttpMethod": [
        "Get"
    ],
    "AddHeadersToRequest": {},
    "AddClaimsToRequest": {},
    "RouteClaimsRequirement": {},
    "AddQueriesToRequest": {},
    "RequestIdKey": "",
    "FileCacheOptions": {
        "TtlSeconds": 0,
        "Region": ""
    },
    "ReRouteIsCaseSensitive": false,
    "ServiceName": "",
    "DownstreamScheme": "http",
    "DownstreamHostAndPorts": [
        {
            "Host": "localhost",
            "Port": 8001,
        }
    ],
    "QoSOptions": {
        "ExceptionsAllowedBeforeBreaking": 0,
        "DurationOfBreak": 0,
        "TimeoutValue": 0
    },
    "LoadBalancer": "",
    "RateLimitOptions": {
        "ClientWhitelist": [],
        "EnableRateLimiting": false,
        "Period": "",
        "PeriodTimespan": 0,
        "Limit": 0
    },
    "AuthenticationOptions": {
        "AuthenticationProviderKey": "",
        "AllowedScopes": []
    },
    "HttpHandlerOptions": {
        "AllowAutoRedirect": true,
        "UseCookieContainer": true,
        "UseTracing": true
    },
    "UseServiceDiscovery": false
}
  • ダウンストリームダウンストリームサービスの設定
  • 上流の上流のサービス構成
  • 集約サービスのアグリゲーション設定
  • ServiceNameは、ロードバランサ、UseServiceDiscovery構成サービスの発見
  • AuthenticationOptions認証サービス
  • RouteClaimsRequirementクレーム認証の設定
  • 設定を制限RateLimitOptions
  • FileCacheOptionsキャッシュの設定
  • QosOptions質の高いサービスとヒューズ設定
  • DownstreamHeaderTransformヘッダの転送設定

もちろん、我々は唯一の実際のニーズに応じて設定される必要があり、実際に使用されているすべてのパラメータを設定する必要はありません。

道によるケース

オセロットルートは、最も基本的な機能です。上流のサービスからの要求を受けたオセロットは、サービス要求が下流に転送され、検証されているので、我々は最初のダウンストリームサービスパラメータでそれらをルーティングを設定しなければなりません。

{
    "DownstreamPathTemplate": "/api/ocelot/{Id}",
    "DownstreamScheme": "http",
    "DownstreamHostAndPorts": [
            {
                "Host": "localhost",
                "Port": 8001,
            }
        ],
    "UpstreamPathTemplate": "/ocelot/{Id}",
    "UpstreamHttpMethod": ["Get"]
}
  • URLテンプレート下流DownstreamPathTemplate要求、{}動的パラメータを表すの内容
  • DownstreamScheme下流サービスのhttpスキーム
  • アドレスDownstreamHostAndPorts下流のサービスは、ロードバランサあれば、ここであなたは数を記入することができます
  • UpstreamPathTemplate上流の要求は、ユーザテンプレートURLが入力され
  • UpstreamHttpMethod上流のHTTPリクエストメソッド、アレイを使用することができます

したがって、サービスアドレスに上流ときにhttp://localhost:4727/ocelot/5要求に応じては、下流オセロットサービスに要求を転送しますhttp://localhost:8001/api/ocelot/5
この場合は下流サービスのデモを提供- OcelotDownAPIを、IISポートに使用することができますOcelotDownAPIを公開します。ダウンストリームサービスは、自分自身を識別するための要求を受信した後の文字列を返します。

[HttpGet("{id}")]
public async Task<IActionResult> Get(int id)
{
    var result = await Task.Run(() =>
    {
        return $"This is from {HttpContext.Request.Host.Value}, path: {HttpContext.Request.Path}";
    });
    return Ok(result);
}

テスト結果:
Ocelot_001_routing1.png

すべての要求を転送するオセロットを必要に応じて、次のように構成することができます。

{
    "DownstreamPathTemplate": "/{url}",
    "DownstreamScheme": "http",
    "DownstreamHostAndPorts": [
            {
                "Host": "localhost",
                "Port": 8001,
            }
        ],
    "UpstreamPathTemplate": "/{url}",
    "UpstreamHttpMethod": ["Get"]
}

このすべてが下流サービスに要求を転送することができます取得します。しかし、この構成の優先順位が他のルーティングテンプレートに一致したら、最低である、を優先させて頂きます。

オセロットホストから前方にのみ特定上流のサービス要求を、所望であれば、次のように構成することができます。

{
    "DownstreamPathTemplate": "/{url}",
    "DownstreamScheme": "http",
    "DownstreamHostAndPorts": [
            {
                "Host": "localhost",
                "Port": 8001,
            }
        ],
    "UpstreamPathTemplate": "/{url}",
    "UpstreamHttpMethod": ["Get"],
    "UpstreamHost": "localhost:4023"
}

4023要求:オセロットはそのような今後ローカルホストから来ます。構成は、2つの他のルートが含まれている場合、なおUpstreamHost、すなわち、とつのルーティングを除いて同一でありUpstreamHost、次いで、オセロットと好みがなく、他のUpstreamHost経路。

優先ルートを設定します。私たちは、定義することができますReRoutes応答の優先ルーティング配列を。0は最も低い優先順位、より多く、より高い優先度です。

[
{
    "UpstreamPathTemplate": "/ocelot/{Id}"
    "Priority": 0
},
{
    "UpstreamPathTemplate": "/ocelot/10"
    "Priority": 1
},
]

概要

本論文では、オセロットの機能とゲートウェイの基本的なアプリケーションを構築する方法についての簡単なケースを説明し、そしてオセロットオセロットの。すべての場合は、同じ記事に配置された場合オセロットが読みやすいではない、過度の長さの原因となります、非常に強力ですが、私はオセロット機能のための一連の記事を書きますので、我々はあなたが参加していきたいと考えています。

参照は、
侵害は、変更または削除された連絡してください場合には、製造プロセスまたは次の文書の一部を参照して本明細書に引用します。
https://www.cnblogs.com/jesse2013/p/net-core-apigateway-ocelot-docs.html

おすすめ

転載: www.cnblogs.com/letyouknowdotnet/p/10964484.html