2016-10-03 5 views
1

Ich verwende derzeit den ServicePartitionResolver, um den http-Endpunkt einer anderen Anwendung in meinem Cluster abzurufen.Service Fabric ServicePartitionResolver ResolveAsync

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('/'); 

Dies funktioniert wie erwartet, aber wenn ich meine Zielanwendung und seinen Hafen Änderungen auf meiner lokalen Dev-Box erneut bereitstellen, gibt die Quellanwendung noch den alten Endpunkt (die jetzt ungültig ist). Gibt es irgendwo einen Cache, den ich löschen kann? Oder ist das ein Fehler?

Antwort

4

Ja, sie sind zwischengespeichert. Wenn Sie wissen, dass die Partition nicht mehr gültig ist, oder wenn Sie einen Fehler erhalten, können Sie die resolver.ResolveAsync() mit einer Überlastung aufrufen, die die frühere ResolvedServicePartitionpreviousRsp, die eine Aktualisierung auslöst, dauert.

Diese API-Überladung wird in Fällen verwendet, in denen der Client weiß, dass die aufgelöste Service-Partition, die er hat, nicht mehr gültig ist.

Siehe auch article.

0

Ja. Sie werden zwischengespeichert. Es gibt 2 Lösungen, um dies zu überwinden.

  1. Die einfachste Codeänderung, die Sie tun müssen, ist var resolver = ServicePartitionResolver.GetDefault(); mit var resolver = new ServicePartitionResolver(); zu ersetzen. Dies zwingt den Dienst, zu jedem Zeitpunkt ein neues ServicePartitionResolver Objekt zu erstellen. Dagegen erhält GetDefault() das zwischengespeicherte Objekt.
  2. [Empfohlen] Der richtige Weg, dies zu handhaben, ist eine benutzerdefinierte CommunicationClientFactory zu implementieren, die CommunicationClientFactoryBase implementiert. Und dann initialisieren Sie eine ServicePartitionClient und rufen Sie InvokeWithRetryAsync. Es ist eindeutig in Service Communication in der Kommunikation Clients und Fabriken Abschnitt dokumentiert.