オセロットと領事ロードバランシングサービス登録APIゲートウェイを達成

オセロットは.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自動切断を要求します

おすすめ

転載: www.cnblogs.com/liaokui/p/11532115.html