C#と領事クラスタサービスの登録と発見

何領事こと?

基本的に通信ミドルウェア上のソケット領事

これは、独自のロードバランシングクラスタに2つの主要な機能、サービスの登録と発見を実装しています。

何のインタフェースが存在しないので、あなたが唯一のコマンドラインを使用することができ領事を開始したいので、私たちは、アプリケーション・インターフェースなしで彼を理解することができ、何のインタフェースが存在しないためにも、領事いったん開始するには、コマンドラインを使用して、コマンドラインcmdを実行.exeのプログラムは、ホストの領事となりました;クローズドCmdをウィンドウたら、領事は実行を停止しました。

サービス登録と発見であるの本質とは何ですか?

実際には、サービス登録と原則の発見は非常に簡単です。

私たちはネイティブに領事を実行すると、彼は自動的に8500ポートをリッスンします。私たち、このへのさまざまな方法でそれを呼び出す、オープンソースのライブラリを(オープンソースのライブラリがnuget上で検索することができ、次の記事では説明します)領事プロセスは、TCPメッセージを送信、またはサービスディスカバリサービスを登録します。

登録メッセージを受信すると領事プロセスは、登録されたサービス情報が、私は店の領事にデータベースを使用するかどうかを調査するための具体的なデータを持っていないので、(ローカルディスクやメモリに保存されますが、我々はすべてされているデータベースに格納されたデータがローカルディスクであることを知っているを入れて、そう、それは確かに、ディスクへのか)のメモリ内のデータです。

データセンター

上に言われているストアデータ、データセンターの正式名称に領事のところ、我々は、ローカルディスクやメモリ登録されたサービス情報を保存します。

領事は、負荷分散クラスタを提供します

領事クラスタはよく理解され、私たちの領事の打ち上げ成功後、8500以外のリスニングポートに加えて、それは8031ポートをリッスンします。

8031ポートは、互いにコンサルのクラスタと通信するために使用されます。

我々は、すべて私たちが二つ以上のコンピュータが領事ミドルウェアをインストール見つける必要があるので、二つ以上のコンピュータにそのクラスタを知っています。

次に、クラスタが形成され、その結果、2台のコンピュータを接続するための領事コマンドラインを使用しました。

各コンピュータコンサルミドルウェア上にインストールされているクラスタ内では、我々は、サーバーエージェント(エージェント)と呼ばれる、クラスタの起動時に、複数のプロキシサーバー間でのリーダーを選出します。

選挙リーダー性質は、上記を介して通信するためのポート8031で、プロキシサーバ間の通信です。

リーダーに選出された場合、クライアントは領事データ検索サービスを呼び出して、あなたが情報を取得するために、マシンの最高のパフォーマンスに行くことができますので、プロキシサーバー自体は、リーダーに情報を読み込むことができます。(注:これは、ロード・バランシング・コンサルの実際の処理モード、一例ではありません)

領事プロキシサーバーのインストール

まず、ダウンロード領事に公式サイトに行き、公式サイトのダウンロードhttps://www.consul.io/downloads.html

下に示すように、サイトの一番下に引いて、領事Window64ビットのダウンロードを選択します。

ダウンロードが完了したら、我々は圧縮consul_1.6.2_windows_amd64.zipを取得し、解凍された弾力consul.exeファイル、以下のように:

我々はCMDウィンドウで領事関連のコマンドを実行したときに、システムが自動的にコマンドを送信するように、したがって、領事を実行するために、我々は、環境変数を追加しconsul.exeするディレクトリをコマンドラインを使用する必要があるためconsul.exeファイルが実行されます。

以下のように設定環境変数:

以下に示すように、環境変数を設定した後、我々は、CMDコマンドラインウィンドウを開いて、私たちの環境変数の設定が成功であることを確認するために領事を入力してください

実行する準備ができ、設定されている私たちの領事環境変数に代わって、図形情報を参照してください。

次のように次に、私たちは領事プロキシサーバーを起動するには、この形式での領事コマンドcmdを入力して、コマンドは次のとおりです。

コマンド・インタプリタ次のように:

1
consul agent -server -ui -bootstrap-expect=1 -data-dir=/tmp/consul -node=consul-1 -client=0.0.0.0 -bind=192.168.1.111 -datacenter=dc1

実際には、そう、それは領事コマンドでは、Web上のその定義に見つけることができますが、私は説明があまりにも公式のだと思う、私はより良い説明を考えて来ました。

領事エージェント:コマンドヘッド、存在しなければなりません。

-server:私たちは、サーバーエージェント(エージェント)を起動しようとしている面がサービスモードです。領事エージェントの動作モード、2、サーバーモードとクライアントモードがあります。差があるだけでサーバーエージェントモードは、リーダーとして選出することができ、クライアント・モードでは、当然のことながら、私たちは自分自身についてを知らせることができます興味を持っている、他の違いがあることができません。

-ui:領事の実行後は、データセンターのWebページに反映されている登録情報に関連http://127.0.0.1:8500/ui/領事エージェント各ノードを格納し、サイト、およびサービスを提供します。このパラメータは、サイト、このデータセンターのサイトに関連し、このパラメータを作成するかどうかを表します。

バインド:マシンのIPアドレスは、クラスタ内の別のプロキシサーバは、IP経由でコンピュータの領事プロキシサーバにアクセスすることができます。

ブートストラップは、期待:クラスタは、サーバーモード(サーバーモード)エージェントがこの数に達した後、実行し始めたことを意味する条件を開始します。

データ-DIR:データセンターのデータが配置され、ディレクトリは安定している必要があり、システムも存在し続ける再起動されます。

データセンター:現在のデータセンターのエージェントの名前、デフォルトはDC1です。

ノード:クラスタ内のクラスタ内のノード名は一意である必要があり、デフォルトは(マシンの代わりに)ノードのホスト名です。

クライアント:ローカルIPアドレスは、ここで0.0.0.0を使用し、それがこのコンピュータは2つのIP、192.168.1.111と192.168.1.112を持っているとき、あなたは多分IPによってマシンにアクセスすることができ、あること、すべてのIPサーバーができることを意味します領事プロキシサーバ。

下に示すように、コマンドを実行します:

あなたが見ることができ、私たちの領事代理店サービスは、既に閉じられています。

今、私たちは別のコンピュータに移動、オープンCMDウィンドウには、次のコマンド領事を実行します。

1
consul agent -server -ui -bootstrap-expect=1 -data-dir=d:\consul -node=consul-2 -client=0.0.0.0 -bind=192.168.80.112 -datacenter=dc1 -join 192.168.80.111

このコマンドは、我々は上記の領事クラスタに、この成功したプロキシサーバーコンピュータに参加し、あなたは、私たちは最終面のコマンドラインに192.168.80.111に参加する追加、見ることができます。

サービスの登録と発見

 

領事サービスの登録

まず、我々はWebAPIのを作成し、ここではコアフレームワークを使用するようにWeb APIを作成し、テストを容易にするために、私は地元のVisualStudioのテストを開始する取りますよ。

WebAPIのを作成した後、我々はNugetでライブラリの領事Netバージョンを見つけます。

Nugetに領事を検索し、次の図のインストールオプションを選択します。

その後、我々は次のように、機能を追加し、フォルダSTARTUP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public static void RegisterConsul()
{
   var consulClient = new ConsulClient(p => { p.Address = new Uri($ "http://127.0.0.1:8500" ); });//请求注册的 Consul 地址
   //这里的这个ip 就是本机的ip,这个端口8500 这个是默认注册服务端口
   var httpCheck = new AgentServiceCheck()
   {
     DeregisterCriticalServiceAfter = TimeSpan.FromSeconds( 5 ), //服务启动多久后注册
     Interval = TimeSpan.FromSeconds( 10 ), //间隔固定的时间访问一次,https://localhost:44308/api/Health
     HTTP = $ "https://localhost:44308/api/Health" ,//健康检查地址 44308 是visualstudio启动的端口
     Timeout = TimeSpan.FromSeconds( 5 )
   };
    
   var registration = new AgentServiceRegistration()
   {
     Checks = new [] { httpCheck },
     ID = Guid.NewGuid().ToString(),
     Name = "test1" ,
     Address = "https://localhost/" ,
     Port = 44308 ,
     
   };
 
   consulClient.Agent.ServiceRegister(registration).Wait(); //注册服务
 
   //consulClient.Agent.ServiceDeregister(registration.ID).Wait();//registration.ID是guid
   //当服务停止时需要取消服务注册,不然,下次启动服务时,会再注册一个服务。
   //但是,如果该服务长期不启动,那consul会自动删除这个服务,大约2,3分钟就会删了
 
}

その後、我々はデバッグやプロジェクトを実行するときに、それが自動的に領事レーンにWEBAPIを登録します、設定でこのメソッドを呼び出します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
   if (env.IsDevelopment())
   {
     app.UseDeveloperExceptionPage();
   }
   
   app.UseHttpsRedirection();
 
   app.UseRouting();
 
   app.UseAuthorization();
 
   app.UseEndpoints(endpoints =>
   {
     endpoints.MapControllers();
   });
   RegisterConsul(); //注册本服务到consul集群
  
}

登録サービスしたら、登録サービスのステータスを表示するために、ローカルデータセンターhttp://127.0.0.1:8500/ui/dc1/services []を訪問することができます。

領事サービス検出

登録が完了しているサービスの後、我々はサービスの発見にコンソールプロジェクトを作成します。

作成したプロジェクトたら、またNugetでサーバーを検索のように、参照領事ライブラリに必要です。

次のようにコードを書きます:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
static void Main( string [] args)
{
   var consulClient = new ConsulClient(x => x.Address = new Uri($ "http://192.168.1.178:8500" ));//请求注册的 Consul 地址
   var ret = consulClient.Agent.Services();
    
   var allServer = ret.GetAwaiter().GetResult();
   //这个是个dictionary的返回值,他的key是string类型,就是8500/ui上services的instance的id
   var allServerDic = allServer.Response;
   var test1 = allServerDic.First();
   string name = test1.Value.Service; //服务名,就是注册的那个test1
   string serverAddress = test1.Value.Address;
   int serverPort = test1.Value.Port;
   Console.WriteLine($ "serverAddress:{serverAddress}==serverPort{serverPort}" );
   //我们可以在客户端启动的时候,调用一下consul来查找服务
   //比如,我们可以在服务集合里查找 服务名叫test1的服务 然后在调用它
   //这样,当服务器改变了test1的ip和端口,我们依然可以在集群里找他test1新的ip和端口了
   Console.ReadKey();
}

結果は以下の通りであります:

あなたは、私たちが正常にも成功したサービス情報を取得し、領事と呼ばれている、見ることができます。

登録および照会サービスに加えて、実際の領事に、また言うことですキーバリューストア、することができ、これは、分散キー・バリューストレージクラスタです。

Key-Value存储的用法在Github已经有例子了,网址:https://github.com/PlayFab/consuldotnet

C#使用Consul进行服务注册与发现就讲完了。

おすすめ

転載: www.cnblogs.com/wwkk/p/12590237.html