Azure service fabric 具有命名侦听器的FabricTransportServiceRemotingListener类型的多个StatefulService副本侦听器

Azure service fabric 具有命名侦听器的FabricTransportServiceRemotingListener类型的多个StatefulService副本侦听器,azure-service-fabric,service-fabric-stateful,Azure Service Fabric,Service Fabric Stateful,基本上,我希望能够读取辅助副本。因此,我尝试在只读侦听器上添加另一个带listenerOnSecondary参数的命名侦听器。但SF在本地部署时无法创建此有状态服务的实例 protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners() { yield return new ServiceReplicaListener(context => new

基本上,我希望能够读取辅助副本。因此,我尝试在只读侦听器上添加另一个带listenerOnSecondary参数的命名侦听器。但SF在本地部署时无法创建此有状态服务的实例

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);
}
protectedoverride IEnumerable CreateServiceReplicaListeners()
{
生利
新建ServiceReplicaListener(上下文=>新建FabricTransportServiceRemotingListener(上下文,此),
“StatefulReadWriteCommunicationListener”);
生利
新建ServiceReplicaListener(上下文=>新建FabricTransportServiceRemotingListener(上下文,此),
“StatefulReadOnlyCommunicationListener”,listennonsecondary:true);
}

仅使用第二个侦听器。 在创建ServiceProxy时,指定要与之通信的目标副本。这是Create方法中的一个参数


在您提到的那个示例中,它们使用两个特定的端点,一个启用用于与辅助副本通信,另一个未启用。

您能否澄清—为什么—您试图读取辅助副本?你想解决什么问题?通常,您确实不想从辅助副本读取数据。不鼓励读取辅助副本,因为您不仅可以看到过时的数据(过去的一致数据),还可以看到尚未提交仲裁的更改,因此可能会被撤消(错误进度)。如果您要阅读二级副本,您必须非常小心阅读内容以及如何处理信息。我想我从文档中了解到,主副本用于读写,而二级副本是只读的。而且,由于我使用可靠的字典来存储查找/热数据,因此如果我在辅助副本中进行读取,将会非常有效。那么我应该在什么时候使用
listenOnSecondary:true
?它会很有效,但可能不正确。除非你不在乎所读信息的一致性,否则你今天几乎不应该读中学的东西。虽然你可以从中学阅读,但这并不意味着你应该阅读。你需要描述一下你今天为什么要这么做。例如,如果您只是试图解决一个性能问题,那么首先对服务进行分区以便将一些读/写操作转移到其他节点可能是解决该问题的更好方法。不要过早地进行优化。现在的问题是它没有创建此服务的实例,因为它似乎抱怨这两个侦听器(我认为如果我删除一个,bec会起作用)。是的,删除第一个。所以你的意思是我不必创建两个侦听器。但是当我创建代理时,我将在create方法中指定?