基本的には、セカンダリレプリカから読み取ることができるようにします。だから私は、読み取り専用のリスナにlistenerOnSecondaryパラメータを持つ別の名前付きリスナを追加しようとしました。しかし、ローカルに展開すると、SFはこのステートフルサービスのインスタンスを作成できません。複数のStatefulService名前付きリスナーを持つFabricTransportServiceRemotingListenerタイプのレプリカリスナー
protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners()
{
yield return
new ServiceReplicaListener(context => new FabricTransportServiceRemotingListener(context, this),
"StatefulReadWriteCommunicationListener");
yield return
new ServiceReplicaListener(context => new FabricTransportServiceRemotingListener(context, this),
"StatefulReadOnlyCommunicationListener", listenOnSecondary: true);
}
セカンダリから読もうとしていますか?どのような問題を解決しようとしていますか?一般的に、セカンダリレプリカからの読み取りは実際には望ましくありません。セカンダリレプリカからの読み込みは、古いデータ(過去の一貫性のあるデータ)を表示できるだけでなく、まだクォーラムコミットされていないため、元に戻すことができます(false progress)。あなたがセカンダリーから読むことになっているのであれば、あなたが読んでいるものとあなたがその情報を使って何をしているのかに非常に注意する必要があります。 – masnider
私は、プライマリレプリカが読み取りと書き込みのためのものであり、セカンダリは読み取り専用であることをドキュメントから読み取ったと考えました。また、信頼できる辞書を使用して検索/ホットデータを保存するので、セカンダリレプリカで読み取りを行うと効率的です。では、いつ私は 'listenOnSecondary:true'を使うべきですか? – alltej
効率的ですが、おそらく_correct_ではありません。あなたが読んでいる情報の一貫性に気にしない限り、今日はセカンダリから読むことはほとんどありません。あなたはセカンダリから読むことができますが、それはあなたが意味するものではありません。あなたは今日あなたが望むように説明する必要があります。たとえば、パフォーマンスの問題を解決しようとしているだけの場合は、おそらくサービスを分割して、読み取り/書き込みの一部が他のノードに最初に移るようにする方がよいでしょう。途中で最適化しないでください。 – masnider