2016-06-08 12 views
2

Das Ziel, das ich habe, besteht darin, mehrere Anwendungen mit einigen eingebetteten Metadaten in Anwendungen/Diensten auszuführen, sodass ich Anwendungen/Dienste mithilfe der Metadaten abfragen kann. Ist das möglich?Einbetten benutzerdefinierter Metadaten mit Service Fabric-Anwendung/Service

Ich schaute auf die folgenden post und die Antwort Hinweise auf diese Möglichkeit, aber keine spezifischen Details, wie Sie das Ergebnis erzielen.

+0

Wenn Sie Abfrage Anwendungen sagen/services die Metadaten verwenden, dürfen Sie so dass Sie bedeuten, dass ein Kunde für einen bestimmten Dienst basierend auf den verfügbaren Metadaten suchen? Haben Sie ein konkretes Beispiel dafür, was Sie gerne tun würden? –

+0

Korrigieren.In dem Post, auf den ich verwiesen habe, haben Sie sich auf fabric: // app/service/property uri bezogen, und ich war mir nicht sicher, wie ich das erreichen soll und was ein "property" -Wert ist. Beispiel: könnte mehrere Anwendungen haben, die zu einer logischen "Umgebung" gehören. Wenn ich alle diese Dienste abfragen müsste, wie würde ich darüber gehen, ist nicht klar. Deshalb habe ich über benutzerdefinierte Metadaten nachgedacht. –

+0

@VaclavTurecek ist das, was Sie klären wollten? –

Antwort

2

Der primäre Teil der "Metadaten", den Sie erhalten, ist der Name der Service-/Anwendungsinstanz. Darüber habe ich in meinem anderen post gesprochen. Die Methode, die funktioniert, besteht darin, jede Dienst-/Anwendungsinstanz mit einem Namen zu erstellen, der einige Informationen enthält, die Clients bei der Lösung verwenden können. Clients können Service Fabric dann nach benannten Anwendungs-/Serviceinstanzen abfragen und eine Verbindung zu einem bestimmten herstellen. Der Name einer Dienst-/Anwendungsinstanz ist URI. Sie können daher eine Pfadhierarchie verwenden, um Informationen zu kategorisieren.

Fortfahren mit dem Audio/Video-Beispiel: Lassen Sie uns dieses Beispiel erweitern, so dass wir eine Anwendung haben, die bestimmte Aufgaben für bestimmte Medienformate für Audio oder Video ausführen kann. Jede Kombination von Aufgaben + Medienformat ist eine einzigartige namens Service-Instanz, was zu einem Einsatz, die etwa wie folgt aussieht:

Application: 
fabric:/avapp 
    Services: 
    fabric:/avapp/video/encoding/mp4 
    fabric:/avapp/video/encoding/h264 
    fabric:/avapp/video/captioning/english 
    fabric:/avapp/video/captioning/czech 
    fabric:/avapp/audio/encoding/aac 
    fabric:/avapp/audio/encoding/mp3 
    etc. 

Jetzt Clients können Service-Fabric abfragen, um zu entdecken, welche Dienste zur Verfügung:

FabricClient fabricClient = new FabricClient(); 

System.Fabric.Query.ServiceList services = await fabricClient.QueryManager.GetServiceListAsync(new Uri("fabric:/avapp")); 

Dann können Sie einfach die Liste der Dienste mit LINQ abfragen. Zum Beispiel, wenn ich alle Dienste sehen möchten, die Video-Codierung tun:

ServicePartitionResolver resolver = ServicePartitionResolver.GetDefault(); 
ResolvedServicePartition servicePartition = await resolver.ResolveAsync(new Uri("fabric:/avapp/video/encoding/h264"), new ServicePartitionKey(1), cancellationToken); 
ResolvedServiceEndpoint endpoint = servicePartition.GetEndpoint(); 

Es ist ein bisschen mehr zu:

services.Where(x => x.ServiceName.AbsolutePath.Contains("video/encoding")); 

Und dann können Sie eine Adresse für einen bestimmten Dienst zu beheben, um es zu verbinden die Adresse Auflösung Teil (see here), aber das ist die allgemeine Idee.

Anwendungsinstanzen können auch benutzerdefinierte Anwendungsparameter (Schlüssel/Wert-Paare) festlegen, die zum Zeitpunkt der Erstellung pro Instanz festgelegt werden können. Sie werden nicht im Anwendungsnamen angezeigt, Sie erhalten diese Informationen jedoch zurück, wenn Sie Service Fabric nach einer Liste der ausgeführten Anwendungsinstanzen fragen. Dies kann möglicherweise auch als Metadaten von Clients verwendet werden, wenn sie entscheiden müssen, mit welcher Anwendung eine Verbindung hergestellt werden soll.

Update: Weitere Informationen über Anwendungsinstanz Parameter:

Wenn Sie create a new application instance können Sie eine Reihe von Schlüssel-Wert-Paare in der application description liefern. Dann, wenn Sie query Service Fabric for application instances Sie erhalten eine Liste von Application Ergebnisobjekte, die die genannten Parameter haben. Dies wird auch in Visual Studio in Ihrem Anwendungsprojekt angezeigt, wo Sie umgebungsspezifische Anwendungsparameterdateien haben. Visual Studio extrahiert diese Schlüssel/Wert-Paare aus den XML-Dateien und verwendet sie in der Anwendungsbeschreibung, wenn eine Instanz Ihrer Anwendung erstellt wird.

enter image description here

+0

Tolle Infos, vielen Dank. Könnten Sie bitte zeigen, wo die Informationen über Schlüssel/Wert-Paare und Abfragen gefunden werden können? Dieses Szenario ist genau das, was ich wahrscheinlich tun würde. –

+0

Kein Problem, aktualisierte meine Antwort mit mehr Informationen über Anwendungsparameter. –

+0

Erstaunlich! Danke für die detaillierte Information. Vor allem, um Code und manifeste Ansätze zu erwähnen. –