オセロットは.NET CoreおよびオープンソースAPIゲートウェイに実装され、それには、強力です:ルーティング、アグリゲーション要求、サービスの発見、認証、許可、ヒューズを制限し、内蔵の負荷分散装置およびサービスファブリック、蝶のトレース統合。これらの関数は、唯一の簡単な構成を完了することができますのみ必要
領事サービス検出
オセロットは、負荷分散の役割を担うことがオセロットができ、複数のノードの下流のサービスがあるとき、つまり、単純なロード機能をサポートしています。しかし、それは登録サービスは、手動でのみ内部のコンフィギュレーション・ファイルを追加することによって行うことができ、ヘルスチェックを提供していません。これは、十分な柔軟性ではなく、リスクのある程度があるでしょう。私たちは領事を行うには、サービスを利用することができます。この時間は、それにオセロットとの完璧な組み合わせを発見しました。
領事は何ですか
領事は、分散、高可用性システムである溶液は、(責任サービスとの間のマイクロ・サービス・ネットワーク・コール、電流制限ヒューズとモニタリングの間にTCP / IP)サービスグリッドであり、そして使用して開発されています非常にシンプル。これは、フル機能のコントロールプレーンを提供し、主な機能は以下のとおりです。サービス検出、ヘルスチェック、キーストレージ、セキュリティサービスの通信、複数のデータセンター。
インストールの領事:windos環境
https://www.consul.io/downloads.htmlファイルのダウンロード
Dドライブを入れて
エージェントの開発モデルの実装を開始するためのPowerShellコマンドを開きます。
補完を開始:オープンはlocalhost:8500のデフォルトのポート8500、あなたは視覚的な領事インターフェイスを見ることができ、デフォルトのサービスは、領事を立ち上げ見ることができます
次に、オセロットによってnetcoreは、APIゲートウェイロードバランシングサービス登録を構築します
新しいAPI1を作成します。nuget依存領事を追加
コードの起動を追加します。
設定パブリック(アプリケーションIApplicationBuilder、IHostingEnvironment ENV、IApplicationLifetime寿命)無効 { IF(env.IsDevelopment()) { ; app.UseDeveloperExceptionPage() } //登録プロジェクト開始メソッド lifetime.ApplicationStarted.Register(OnStartメソッドを); //アイテム登録closeメソッド lifetime.ApplicationStarted.Register(OnStopped); app.UseMvc(); } //近い領事が除去 プライベートOnStoppedボイド() { VAR =新しい新しいConsulClientクライアント(); 領事の// IDを現在のサービスを削除します。 client.Agent.ServiceDeregister( "をSERVICENAME:93「); } OnStartプライベート()無効 { ; VAR =新しい新しいConsulClientクライアント() //ヘルスチェック VARを= httpCheck新しい新AgentServiceCheck() { //サービスエラーが自動的に1分後に削除されます DeregisterCriticalServiceAfter TimeSpan.FromMinutes =(1)、 // 10各現在のAPIリソースのアドレスは、アドレスの次のアドレスへの第2の要求をされた送信 間隔= TimeSpan.FromSeconds(10)、 HTTP $ = "HTTP:// localhostを:93 /ヘルスチェック" }; VAR = agentReg新しい新AgentServiceRegistration() { チェック= httpCheck、 一意ID //このリソースとサービス ID = "サービス名:93"、 アドレスは= "localhsot"、 NAME = "サービス名"、 ポート= 93 }; client.Agent.ServiceRegister(agentReg).ConfigureAwait(偽); }
ヘルスチェックインタフェースを追加
[ルート( "ヘルスチェック")] [ApiController] パブリッククラスHealthCheckController:ControllerBase { // GET:API /ヘルスチェック [HTTPGET] [HttpHead] パブリックIActionResultのPing() { )(OKを返します。 } }
ValuesControllerを変更
[ルート( "API / [コントローラー]")] [ApiController] publicクラスValuesController:ControllerBase { // GET API /値 [HTTPGET] パブリック文字列取得() { リターン"这是1资源服务器API"。 } }
その後、我々は、詳細はポート92を有効,, API2にAPI1をコピー........
項目を追加Api.Gateway(オセロットゲートウェイサーバ)オセロットオセロットパッケージを追加Ocelot.Json構成サーバーポート91が追加されます
オセロット、JSON
{ "再ルーティング":[ { //アドレスを露出させるために "UpstreamPathTemplate": "/ API / {コントローラ}"、 "UpstreamHttpMethod" [] "GET"、 //次のアドレスに転送 "DownstreamPathTemplate":「/ API / {コントローラ} " "DownstreamScheme ":" HTTP"を、 //リソースリストサーバ "DownstreamHostAndPorts ":[ { "ホスト":" localhost"を、 "ポート":92 }、 { "ホスト":" localhost"を、 "ポート「:93 } ]、 //アルゴリズムロードバランシング決定 { "LoadBalancerOptions" "タイプ": "leastconnectionを" }、 "UseServiceDiscovery":trueに } ]、 オセロット//サーバアドレスの外側に露出されたアドレスへのアクセス "GlobalConfiguration":{ "BASEURL": "HTTP:// localhostの:91" } }
スタートアップの変更
公共のボイドConfigureServices(IServiceCollectionサービス) { services.AddOcelot(); services.AddMvc()SetCompatibilityVersion(CompatibilityVersion.Version_2_2)。 } //このメソッドはランタイムによって呼び出されます。HTTPリクエストパイプラインを設定するには、このメソッドを使用します。 公共ボイド設定(IApplicationBuilderアプリ、IHostingEnvironmentのENV) { IF(env.IsDevelopment()) { app.UseDeveloperExceptionPage()。 } app.UseOcelot()(待ち)。 app.UseMvc(); }
プログラムの修正
パブリッククラスプログラム { のpublic static無効メイン(文字列[] args) { CreateWebHostBuilder(引数).Build()を実行します()。 } パブリック静的IWebHostBuilder CreateWebHostBuilder(文字列[]引数)=> WebHost.CreateDefaultBuilder(引数) .ConfigureAppConfiguration((hostingContext、ビルダー)=> { ビルダー .SetBasePath(hostingContext.HostingEnvironment.ContentRootPath) .AddJsonFile( "Ocelot.json")。 }) .UseUrls( "のhttp:// +:91") .UseStartup <起動時>(); }
API3とAPI2を開始
再起動Api.Gateway
执行ます。http:// localhostを:91 / API /値
そして、実行
ここでは、ロードバランシングアルゴリズムである:LeastConnection
もちろん、あなたも他の選択することができます。
- ラウンドロビン - ポーリング、隣
- LeastConnection - その使命最小限の接続の最小数、
- NoLoadBalance - ロード・バランシングしないでください
我々はオフにAPI1場合、それは唯一、API2にサービスのAPI1自動切断を要求します