2016-06-30 10 views
2

Ich arbeite an einem POC mit azurem Service Fabric. Ich habe meinen Dienst in einem lokalen Cluster bereitgestellt und er funktioniert gut mit den Standardeinstellungen in Local.xml.Azure Service Fabric Instanzanzahl

Sobald ich die Anzahl der Instanzen ändere, wird folgende Ausnahme ausgelöst. Wo ist die Option zum Ändern der Instanzanzahl? Im Grunde versuche ich jetzt, meinen Dienst auf zwei Knoten auszuführen. Es funktioniert gut, wenn es der Standardwert, 1.

Innerexception ist: HResult = -2146233088 Message = Fehler -4091 EADDRINUSE Adresse bereits verwendet Source = Microsoft.AspNetCore.Server.Kestrel Statuscode = -4091

Mein local.xml wird hier kopiert

<Parameters> 
    <Parameter Name="Product_InstanceCount" Value="2" /> 
    </Parameters> 

Jede Hilfe wirklich zu schätzen.

Dank

Antwort

5

Nach der offiziellen Dokumentation Microsoft, müssen Sie das läuft nur eine Instanz des Dienstes gewährleisten, wenn Sie zu einem lokalen cluster.Otherwise implementieren Sie in Konflikte mit mehreren Prozessen hören gleich Port laufen Sie können mehrere Instanzen festlegen, wenn Sie Azure bereitstellen.

Siehe in der Dokumentation: - https://azure.microsoft.com/en-us/documentation/articles/service-fabric-add-a-web-frontend/

+2

Die neueren Versionen der Tools werden nicht schwer damit versagen, stattdessen wird nur einen Endpunkt zu einem Ihrer Knoten zuweisen und beginnen, Warnungen über Ihr Cluster ungesund zu generieren. Wenn Sie sich die ETW-Ereignisse ansehen, erhalten Sie etwas in der Art von: "Microsoft.Net.Http.Server.WebListenerException (0x80004005): Das Präfix 'http: // +: 6001 /' ist bereits registriert." –

+0

Wie man bereits registrierte Ports freigibt – abhi

1

Wenn Sie irgendeine Art von ASP.Net oder Owin gehosteten Dienst ausgeführt werden. Sie müssen eine Instanzanzahl von -1 verwenden. Dies wird eine Instanz auf jedem Knoten einrichten. Bei einer Instanzanzahl von 2 erhalten Sie 2 Instanzen, die sich möglicherweise auf demselben Knoten befinden.

3

Wenn Sie den lokalen SF-Cluster verwenden und den Service-Endpunkt-Port repariert haben, verwenden Sie nur eine Instanz. Beispiel:

Service.Endpoint verwendet Port 8090. Dies ist in ServiceManifest.xml definiert. In einem lokalen Cluster läuft eigentlich alles nur auf einem Knoten, d. H. Ihrer Entwicklungsmaschine. Wenn Sie versuchen, zwei Instanzen desselben Dienstes mit einem fest definierten Port zu erstellen, wird der Fehler Port bereits verwendet angezeigt.

Versuchen Sie, zu einer Instanz zu wechseln oder sie in den tatsächlichen Azure-Cluster zu verschieben oder hartcodierte Portnummern zu entfernen.

0

Wir haben ein ähnliches Problem und lösten es mit Build-Skripten. Sie können das ServiceManififest entweder über ein Build-Skript ersetzen oder Tokenizer verwenden, um den Port-Wert zu ersetzen.

Lokal können Sie die aktualisierten/adjustierten Paketdateien erstellen und installieren und sie mit DeployFabricApplciation bereitstellen und auf diese Weise testen.

1

Ich habe dieses Problem nicht erlebt.

Sie können die Instanz zählen ändern programmatisch den Stoff-Client:

var fabricClient = new FabricClient(); 
var instanceCount = 3; 
var services = await fabricClient.QueryManager.GetServiceListAsync(new Uri("fabric:/MyMicroServiceApp")); 
var service = services.FirstOrDefault(e => e.ServiceName.AbsolutePath.Contains("MyService")); 
var updateDescription = new StatelessServiceUpdateDescription(); 
updateDescription.InstanceCount = instanceCount; 
await fabricClient.ServiceManager.UpdateServiceAsync(new Uri(service.ServiceName.AbsoluteUri), updateDescription); 

Ich habe diese ein Proof of Concept zu entwickeln, auf die Größe einer Warteschlange die Anzahl von Arbeitsprozessen zu erhöhen abhängig. Sobald Sie die Anzahl der Instanzen eines Service ändern, wird das Service Fabric-Framework automatisch eine Instanz des Service zu/von einem Knoten bereitstellen/entfernen.