Wir erstellen APIs mit ServiceStack, die mandantenfähig sind. Wir wollen DNS-basiertes Load-Balancing und Routing durchführen, anstatt Dinge über einen Reverse-Proxy (wie nginx oder haproxy) zusammenzufassen.Multi-Tenant-ServiceStack-API, dieselbe Bereitstellung, um auf Anforderungen auf verschiedenen Hostnamen zu antworten?
Wir haben DTOs anfordern, die einen Tenant-Parameter haben. Mit ServiceStack (und seinem SwaggerFeature) können wir benutzerdefinierte Routen definieren und die DTOs so dokumentieren, dass wir Werte aus Pfad, Abfrage, Kopfzeilen oder Text lesen können.
Wie verbinden wir (am besten) Dinge, damit DTO-Eigenschaften auch Werte aus einem Hostnamenmuster lesen können? Also, machen Sie die Route nehmen Werte von Übereinstimmung aus dem Hostnamen sowie den Pfad?
Wir möchten URLs haben, wie
https://{tenant}.{DNS zone for environment}/{rest of path with tokens}
auch - aus DNS-Zone, in der Umgebung sind wir variieren je - für Nicht-Produktion verwenden wir (sagen wir) testing-foobar.com
und Produktion verwenden wir real-live.com
. Idealerweise können wir beide mit einer einzelnen Routen-Deklaration unterstützen (und bevorzugen es, das Anfrage-DTO anstelle der imperativen Deklaration zur Laufzeit zu dekorieren AppHost.Init
).
Meine erste Neigung ist es, [Anfrage und Antwort-Filter] (https://github.com/ServiceStack/ServiceStack/wiki/Request-and-Response-Filters) Haben Sie sie in Betracht gezogen? –
Ich würde einen Request-Filter verwenden, der ein Anforderungs-DTO injiziert, das eine benutzerdefinierte 'ITenant'-Schnittstelle implementiert, die nur eine' Tenant'-Eigenschaft hat. Eine andere Lösung besteht darin, eine Erweiterungsmethode "IHttpRequest.Tennant()" zu verwenden, die Sie in allen Diensten erneut verwenden können, um die Eigenschaften AbsoluteUri oder RawUrl zu überprüfen. – mythz
@mythz - Gibt es irgendwo ein Beispiel, das zeigt, wie man dies in ServiceStack implementiert? – Marek