2016-04-20 5 views
0

私のサービスの1つが、外部サービスからコールバックを受け取るWCFホストを公開するシナリオがあります。ファブリックサービスの開始時の利用可能性

これらのホストは動的に作成され、数百もあります。ノードが要求を受信して​​失敗を受け取らないようにするには、ノードがすべて稼動していることを確認する必要があります。これは重要です。

準備が整うまでサービスがリクエストを受け取らないようにする方法はありますか?クラウドサービスでは、このコードをOnStartメソッド内にすべて含めることでこれを実行できます。

最初に考えたのは、コミュニケーションリスナーを開く前にブートストラップすることができるということです。ファブリックマネージャーはこれが完了した後にのみ要求を送信することを期待していますが、生涯が処理されます。

答えて

1

クラスタ内のサービスの間のネットワークトラフィックを制御するファブリックマネージャはありません。サービスが稼働している場合、クラスタ内のクライアントまたはその他のサービスは、そのアドレスを知っていれば、接続しようとすることができます。これを念頭に置いて、ここで制御できるものは2つあります。

最初は、サービスのエンドポイントが他のサービスまたはクライアントによって検出可能かどうかです。これは、サービスエンドポイントがサービスファブリックのネームサービスに登録されているポイントで、ICommunicationListener.OpenAsyncメソッドが返されたときに発生します。その時点で、サービスエンドポイントが登録され、他のユーザーがサービスエンドポイントを検出して接続を試みることができます。もちろん、そうしたくない場合は、ネーミングサービスやICommunicationListenerパターンを使用する必要はありません。あなたのサービスはそれが気になるたびにエンドポイントを開くことができますが、ネーミングサービスに登録しない場合は、独自のサービスディスカバリメカニズムを用意する必要があります。

サービスが実行されているノードがAzure Load Balancer(またはAzureでホスティングしていない場合はロードバランサ)からトラフィックを受信して​​いるかどうかを確認します。これは、Service Fabricとはあまり関係がなく、ロードバランサ自体とは関係がありません。 Azureでは、load balancer probeを使用して、トラフィックをノードに送信する必要があるかどうかを判断できます。

EDIT:https://azure.microsoft.com/en-us/documentation/articles/service-fabric-connect-and-communicate-with-services/

+0

ありがとうヴァーツラフを: 私たちのマニュアルをAzureのロードバランサに関するいくつかの情報を追加しましたが、このことができます願っています。 OpenAsyncを呼び出す前に私のサービスホストを開くと、ネームサービスでは発見できないため、azureから自動的にトラフィックは受信されません。それとも間違っていますか?もしそうでなければ、私はロードバランサ機能をチェックアウトする必要があります。 –

+0

いいえ、Azure Load Balancerは、サービスファブリック、ネーミングサービス、またはアプリケーションレイヤーについては認識していませんが、VMについてのみ認識しています。 Azureでクラスタを設定するときは、ロードバランサを介して公開するクラスタVMのポートである「カスタムエンドポイント」を指定します。これはすべてのロードバランサが知っているものです。プローブルールを追加しない限り、VMが特定のポートでトラフィックを受け入れることができるかどうかをテストするためにロードバランサが使用しますが、これもすべてVMレベルです。 –

+0

Vaclavに感謝します。それはそれをクリアします(そしてガイドのおかげで)。私が心配しているのは、VMのポートを開いて、プローブが準備が整う前にプローブがトラフィックをダイレクトするように制御していないからです。おそらくこれを処理する方法を理解しようとしています - おそらく何かを再構築する必要があります。 –

関連する問題