Konfiguration
Ein Clustron-Zaris-Client wird durch eine Connection String konfiguriert. Sie halten diese Zeichenfolge in der Standard-.NET-Konfiguration — dem Abschnitt ConnectionStrings der Datei appsettings.json — und wählen sie über den Namen aus, genau wie bei einer SQL-Server- oder anderen Datenbank-Connection-String. Es gibt keine separate Moduseinstellung und keine Seed-Liste, die Sie pflegen müssten; die Zeichenfolge enthält alles.
Nutzen Sie die Konfiguration, um Store-Einstellungen extern zu verwalten, statt sie fest zu codieren. So können Sie beispielsweise in der Entwicklung einen In-Process-Store und in der Produktion einen Remote-Cluster betreiben, indem Sie mit demselben Schlüssel eine andere appsettings-Datei ausliefern.
Grundkonfiguration
Definieren Sie Ihre Stores im Standardabschnitt ConnectionStrings. Jeder Store ist ein Eintrag, dessen Schlüssel ein von Ihnen gewählter Name und dessen Wert eine Zaris-Connection-String ist. Das folgende Beispiel definiert einen Store namens default, der sich mit einem Remote-Cluster verbindet:
{
"ConnectionStrings": {
"default": "zaris://localhost:7861/default"
}
}
Aufbau der Connection String
Jeder Store wird durch eine Connection String beschrieben, die Transport, Hosts, Store-Namen sowie alle Sicherheits- oder Timeout-Optionen enthält.
Schema und Hosts
Das Schema wählt den Transport: zaris:// für eine unverschlüsselte Verbindung oder zariss:// für TLS. Danach folgen ein oder mehrere durch Kommas getrennte host:port-Seeds:
zaris://10.0.0.11:7861,10.0.0.12:7861/default
Sie benötigen nur einen gültigen Seed. Der Client nutzt ihn, um die übrigen Nodes im Cluster zu ermitteln. Geben Sie für Ausfallsicherheit und Failover mehr als einen Seed an, falls der erste nicht verfügbar ist. Jeder Host ist ein Endpunkt der Form <Machine/IP>:<ClientPort>, wobei der Port der Client-Port ist, der beim Erstellen des Stores mit -BaseClientPort festgelegt wurde.
Für einen In-Process-Store (eingebettet) verwenden Sie den reservierten Host inproc ohne Port — zaris://inproc/default. Ein In-Process-Store läuft im Arbeitsspeicher innerhalb Ihres Prozesses und kann kein TLS verwenden.
Store-Name und Optionen
Der Pfad hinter den Hosts ist der Store-Name (erforderlich); er muss der Cluster-ID entsprechen. Optionale Query-Parameter steuern Sicherheit und Timeouts: ?token=env:VAR (oder file:/path oder ein Literal), ?ca=/path/ca.pem, ?tlsInsecure=true (nur Entwicklung), ?connectTimeoutMs=5000 und ?requestTimeoutMs=5000.
Die Konfiguration registrieren
Registrieren Sie jeden Store aus der Konfiguration mit AddClustronZarisFromConnectionStrings. Dies liest den Standardabschnitt ConnectionStrings und registriert jeden oben definierten Zaris-Eintrag. Einträge, die nicht zu Zaris gehören, etwa eine SQL-Server-Zeichenfolge, werden ignoriert.
using Clustron.Zaris.Client.DependencyInjection;
services.AddClustronZarisFromConnectionStrings(configuration);
Um stattdessen nur einen einzelnen benannten Eintrag zu registrieren, übergeben Sie die Konfiguration und den Schlüssel:
services.AddClustronZaris(configuration, "default");
Einen Client erhalten
Lösen Sie einen Client über den in der Konfiguration definierten Namen auf. Dies liefert einen Client für den Store default:
var client = await services
.GetRequiredService<IZarisClientProvider>()
.GetAsync("default");
Mehrere Stores definieren
Sie können unter ConnectionStrings beliebig viele Stores definieren, einen Eintrag pro Schlüssel — einige remote, einige In-Process. Dieses Beispiel definiert einen Remote-Store orders und einen In-Process-Store local. Lösen Sie jeden über seinen Namen mit GetAsync auf.
{
"ConnectionStrings": {
"orders": "zaris://orders-node:7861/orders",
"local": "zaris://inproc/local"
}
}
services.AddClustronZarisFromConnectionStrings(configuration); // registers "orders" and "local"
var ordersClient = await provider.GetAsync("orders");
var localClient = await provider.GetAsync("local");
Die Konfiguration hält die Store-Einstellungen an einem Ort, ermöglicht den Wechsel zwischen In-Process und Remote durch Bearbeiten einer Zeichenfolge, unterstützt mehrere Stores und funktioniert mit der standardmäßigen .NET-Dependency-Injection.