2017-02-02 18 views
0

私たちのアプリケーションでは、SQL Serverでsignalr scaleoutを実装しました。バックプレーンは設定されていますが、接続されているすべてのサーバにメッセージを送信できないようです。私たちがどこに問題があるのか​​を特定できるように、バックパイルに来るリクエストを記録するイベントやその他の方法はありますか?我々は、各サーバのシグナルトレースログを有効にすることができ、そのトレースは以下の通りです。しかし、ここの情報は、私たちが問題を見つけるにはあまりにも少ないです。SignalRバックプレーントレースログ

2017-02-02 04:05:11.7642 TRACE SignalR.SqlMessageBus Stream 0 : No records received (System.Diagnostics.TraceSourceExtensions.Trace) 
2017-02-02 04:05:11.7798 TRACE SignalR.SqlMessageBus Stream 0 : Waiting 3000ms before checking for messages again (System.Diagnostics.TraceSourceExtensions.Trace) 
2017-02-02 04:05:14.8111 TRACE SignalR.SqlMessageBus Created DbCommand: CommandType=Text, CommandText=SELECT [PayloadId], [Payload], [InsertedOn] FROM [SignalR].[Messages_0] WHERE [PayloadId] > @PayloadId, Parameters= [Name=PayloadId, Value=51373] (System.Diagnostics.TraceSourceExtensions.Trace) 
2017-02-02 04:05:14.8111 TRACE SignalR.SqlMessageBus Stream 0 : No records received (System.Diagnostics.TraceSourceExtensions.Trace) 
2017-02-02 04:05:14.8267 TRACE SignalR.SqlMessageBus Stream 0 : Setting up SQL notification (System.Diagnostics.TraceSourceExtensions.Trace) 
2017-02-02 04:05:14.8267 TRACE SignalR.SqlMessageBus Created DbCommand: CommandType=Text, CommandText=SELECT [PayloadId], [Payload], [InsertedOn] FROM [SignalR].[Messages_0] WHERE [PayloadId] > @PayloadId, Parameters= [Name=PayloadId, Value=51373] (System.Diagnostics.TraceSourceExtensions.Trace) 

SQLバックプレーンがすでに動作しているかどうかを確認するにはどうすればよいですか?

答えて

2

短い答えは:backplaceは、以下の条件が満たされなければならない作業をしているかどうかを確認するために、あなたはでSignalR.SqlMessageBusから基礎となるデータベース表に

  • ログメッセージを

    1. 関連のメッセージを見ることができるはずですトレースログ(有効)

    詳しい情報:

    我々はまた、SQLのscaeloでSignalRを使用UTと私たちは、新しいメッセージがデータベーステーブルに保持され、次のトレースログを取得:

    SignalR.SqlMessageBus Verbose: 0 : Stream 0 : Saving payload with 1 messages(s) to SQL server 
    

    この後、私たちは、それぞれのSignalRテーブルにメッセージを識別することができます(ご使用の構成に応じて、複数のがあるかもしれません) :あなたのログに

    enter image description here

    私だけSignalR.SqlMessageBusからのメッセージを参照してください。このように行うことができますSignalR.ScaleoutMessageBusトレースソースの設定

    SignalR.SqlMessageBus Verbose: 0 : Stream 0 : SqlReceiver last payload ID=8390, new payload ID=8391 
    SignalR.SqlMessageBus Verbose: 0 : Stream 0 : SqlReceiver last payload ID=8390, new payload ID=8391 
    SignalR.SqlMessageBus Verbose: 0 : Stream 0 : Updated receive reader initial payload ID parameter=8391 
    SignalR.SqlMessageBus Verbose: 0 : Stream 0 : Updated receive reader initial payload ID parameter=8391 
    SignalR.SqlMessageBus Verbose: 0 : Stream 0 : Payload 8391 containing 1 message(s) received 
    SignalR.SqlMessageBus Verbose: 0 : Stream 0 : Payload 8391 containing 1 message(s) received 
    SignalR.ScaleoutMessageBus Information: 0 : OnReceived(0, 8391, 1) 
    SignalR.ScaleoutMessageBus Information: 0 : OnReceived(0, 8391, 1) 
    

    :詳細を取得するには、また、スケールアウト関連のトレースこのようVerbose,ActivityTracingにソース(SignalR.ScaleoutMessageBusログメッセージを表示し、最後の2行を参照)を設定する必要があり

    <source name="SignalR.ScaleoutMessageBus" switchName="SignalRSwitch" > 
        <listeners> 
         <add name="SignalR-Bus" /> 
        </listeners> 
        </source> 
    
  • +0

    返信いただきありがとうございます。複数のサーバーが接続されているため、特定のサーバーが保存しているメッセージのペイロードIDを見つける方法があります。複数のサーバーが同時に保存しているため、「1つのメッセージでペイロードをSQLサーバーに保存する」ことによって得られる情報はそれほど多くありません。 – janitha000

    +0

    実際にはいです。私の答えの最後にもっと完全なログファイルを見ると、 'PayloadId'が表示されている' SqlMessageBus'と 'ScaleoutMessageBus'からのいくつかのメッセージが表示されます。そして、これからDBテーブルをチェックして、メッセージが永続化されているかどうかを確認することができます。 –