2017-07-21 10 views
6

サービスファブリッククラスタで実行されているアプリケーションのサービスエンドポイントの外部リストを更新するサービスを作成しようとしています。 (基本的に私の構内F5ロードバランサにAzure Load Balancerを複製する必要があります。)サービスファブリッククラスタレベルのイベントをサブスクライブする

先月のサービスファブリックQ & Aでは、チームは私にRegisterServiceNotificationFilterAsyncと指摘しました。

このメソッドを使用してステートレスサービスを作成し、それを開発クラスタにデプロイしました。その後、ASP.NET Core Statelessサービステンプレートを実行して新しいサービスを作成しました。

2番目のサービスを展開すると、最初のサービスでブレークポイントがヒットし、サービスが追加されたことがわかりました。しかし、ブレークポイントは打たれませんでした。

私はインターネット上でこの種の事例をほとんど見いだせませんでした。だから、他の誰かがこれをして、私が間違っていた場所を教えてくれることを頼んでいます。ここで

は、アプリケーションの変更をキャッチしようとしている私のサービスのためのコードです:あなたはこの進行を取得する方法上の任意のヒントを持って

protected override async Task RunAsync(CancellationToken cancellationToken) 
{ 

    var fabricClient = new FabricClient(); 

    long? filterId = null; 


    try 
    { 
     var filterDescription = new ServiceNotificationFilterDescription 
     { 
      Name = new Uri("fabric:") 
     }; 
     fabricClient.ServiceManager.ServiceNotificationFilterMatched += ServiceManager_ServiceNotificationFilterMatched; 
     filterId = await fabricClient.ServiceManager.RegisterServiceNotificationFilterAsync(filterDescription); 


     long iterations = 0; 

     while (true) 
     { 
      cancellationToken.ThrowIfCancellationRequested(); 

      ServiceEventSource.Current.ServiceMessage(this.Context, "Working-{0}", ++iterations); 

      await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken); 
     } 
    } 
    finally 
    { 
     if (filterId != null) 
      await fabricClient.ServiceManager.UnregisterServiceNotificationFilterAsync(filterId.Value); 
    } 



} 

private void ServiceManager_ServiceNotificationFilterMatched(object sender, EventArgs e) 
{ 
    Debug.WriteLine("Change Occured"); 
} 

場合、私はそれらを見てみたいです。

+0

本当にあなたの質問には関係しませんが、「基本的に私はAzure Load Balancerを複製する必要があります」 - ここで複製しようとしている機能は何もありません。私が知っていることから、ALBはかなり "ダム"で、SFを知らないのですか? – Mardoxx

+0

あなたは 'Name = new Uri(" fabric:/ ")' – LoekD

+0

@LoekDを試すことができますか?Microsoftの従業員がスラッシュを付けずにこの投稿を行ったと言います。 https://github.com/Azure/service-fabric-issues/issues/122私はそれを試しました、そして、私は "無効な名前URI"を取得します。 – Vaccano

答えて

1

あなたはこのように、trueにMatchNamePrefixを設定する必要があります。それ以外の場合は、特定のサービスを一致します

var filterDescription = new ServiceNotificationFilterDescription 
    { 
     Name = new Uri("fabric:"), 
     MatchNamePrefix = true 
    }; 

。私のアプリケーションでは、このパラメータをtrueに設定すると、クラスタ全体のイベントを検出できます。

関連する問題