我使用开箱即用的分区功能创建了一个有状态的服务:
<StatefulService ServiceTypeName="ExamplesServiceType" TargetReplicaSetSize="[ExamplesService_TargetReplicaSetSize]" MinReplicaSetSize="[ExamplesService_MinReplicaSetSize]">
<UniformInt64Partition PartitionCount="[ExamplesService_PartitionCount]" LowKey="-9223372036854775808" HighKey="9223372036854775807" />
</StatefulService>
服务清单可以设置参数(也可以开箱即用):
<Parameter Name="ExampleService_PartitionCount" Value="1" />
<Parameter Name="ExampleService_MinReplicaSetSize" Value="2" />
<Parameter Name="ExampleService_TargetReplicaSetSize" Value="3" />
<Parameter Name="WebService_InstanceCount" Value="1" />
现在我想从同一集群中的无状态服务调用我的有状态服务:
ServiceUriBuilder builder = new ServiceUriBuilder(ExampleServiceName);
var service = ServiceProxy.Create<IExampleService>(builder.ToUri(),new ServicePartitionKey(1));
return service.MyCallAsync(id);
我遇到了以下错误:
分区“a67f7afa-3370-4e6f-ae7c-15188004bfa1”的主要或无状态实例具有无效地址,这意味着来自副本/实例的正确地址未在系统中注册。
我正在尝试访问的有状态服务记录到事件日志中,而该日志携带“partitionId”:“a67f7afa-3370-4e6f-ae7c-15188004bfa1”。
我错过了什么?
CreateServiceInstanceListeners()
,你应该使用protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners() { return new[] { new ServiceInstanceListener(this.CreateServiceRemotingListener) }; }
进行重写。 - MaGuusing Microsoft.ServiceFabric.Services.Remoting.Runtime;
。 - Hugo Nava Kopp