Stiamo creando API utilizzando ServiceStack che sono multi-tenant. Vogliamo eseguire il bilanciamento del carico basato su DNS e il routing, invece di ricucire le cose tramite un proxy inverso (come nginx o haproxy).API multi-tenant ServiceStack, stessa distribuzione per rispondere alle richieste su nomi host diversi?
Abbiamo richieste DTO con un parametro Tenant. ServiceStack (e la sua caratteristica Swagger) ci consente di definire percorsi personalizzati e documentare le DTO in modo tale che possiamo leggere i valori da percorso, query, intestazioni o corpo.
In che modo (meglio) cabliamo le cose in modo che le proprietà DTO possano leggere anche i valori di un pattern di nome host? Quindi, fai in modo che il percorso prenda i valori dalla corrispondenza tra nome host e percorso?
Ci piacerebbe avere gli URL come
https://{tenant}.{DNS zone for environment}/{rest of path with tokens}
Inoltre - out zone DNS può variare a seconda dell'ambiente che siamo in - per i non-produzione utilizziamo (diciamo) testing-foobar.com
e produzione usiamo real-live.com
. Idealmente saremmo in grado di supportare entrambi con una singola dichiarazione di percorso (e preferiamo decorare il DTO della richiesta anziché la dichiarazione imperativa in fase di esecuzione AppHost.Init
).
La mia prima inclinazione è quella di utilizzare [filtri richiesta e risposta] (https://github.com/ServiceStack/ServiceStack/wiki/Request-and-response-filters) Li hai considerati? –
Utilizzerei un filtro Request per iniettare qualsiasi DTO di richiesta che implementa un'interfaccia 'ITenant' personalizzata che abbia solo una proprietà' Tenant'. Un'altra soluzione consiste nell'utilizzare un metodo di estensione 'IHttpRequest.Tennant()' che è possibile riutilizzare in tutti i servizi che ispezionano le proprietà AbsoluteUri o RawUrl. – mythz
@mythz: c'è un esempio da qualche parte in cui viene illustrato come implementarlo in ServiceStack? – Marek