Azure service fabric 服务结构ServicePartitionResolver解析程序异步
我当前正在使用ServicePartitionResolver获取集群中另一个应用程序的http端点Azure service fabric 服务结构ServicePartitionResolver解析程序异步,azure-service-fabric,Azure Service Fabric,我当前正在使用ServicePartitionResolver获取集群中另一个应用程序的http端点 var resolver = ServicePartitionResolver.GetDefault(); var partition = await resolver.ResolveAsync(serviceUri, partitionKey ?? ServicePartitionKey.Singleton, CancellationToken.None); var endpoints = J
var resolver = ServicePartitionResolver.GetDefault();
var partition = await resolver.ResolveAsync(serviceUri, partitionKey ?? ServicePartitionKey.Singleton, CancellationToken.None);
var endpoints = JObject.Parse(partition.GetEndpoint().Address)["Endpoints"];
return endpoints[endpointName].ToString().TrimEnd('/');
这与预期的一样,但是如果我重新部署目标应用程序,并在本地dev box上更改其端口,则源应用程序仍会返回旧的端点(该端点现在无效)。有我可以清除的缓存吗?或者这是一个bug?是的,它们是缓存的。如果知道分区不再有效,或者收到错误,可以调用具有重载的
ResolvedServicePartition
ResolveRSP
,该重载会触发刷新
此api重载用于客户端知道
已解析的服务分区不再有效
我也看到了。是的。它们被缓存。有两种解决方案可以克服这一问题
var resolver=ServicePartitionResolver.GetDefault()代码>与var resolver=new ServicePartitionResolver()代码>。这将强制服务每次创建一个新的ServicePartitionResolver
对象。然而,GetDefault()
获取缓存对象
CommunicationClientFactory
,它实现了CommunicationClientFactoryBase
。然后初始化一个ServicePartitionClient
并调用InvokeWithRetryAsync
。在“客户与工厂的沟通”一节中有明确的记录