Gestione di una risorsa limitata in resto WEB API 2

0

Ho sviluppato una WEB API 2 riposante (C #, .NET 4.7) per un progetto di integrazione interna. Nel backend della mia API, ho bisogno di utilizzare la DLL di un venditore per elaborare l'input fornito.

La dll del venditore è scritta in C, e ha una limitazione che, non ci possono essere più di 8 istanze inizializzate allo stesso tempo.

Poiché la mia API REST può essere chiamata più volte contemporaneamente, c'è il rischio che possa raggiungere il limite di 8 istanze durante un periodo di occupato. (La mia API non è pubblica. C'è una piccola possibilità che ciò possa accadere, ma devo comunque stare al sicuro.)

Per evitare ciò, stavo pianificando di mantenere il conteggio corrente delle istanze in esecuzione su una variabile Singleton thread-safe. E se posso mantenere la logica di incremento / decremento in cui inizializzo la DLL C, posso stare al sicuro.

Poiché un'API REST è senza stato, è buona norma utilizzare un approccio statico thread-safe per implementarlo? Oppure potrebbero esserci approcci migliori come l'uso della cache del server, lo stato dell'applicazione (applicazione ["VariableName"]="Valore") o persino un file flat.

E devo aggiungere che, un database non è un'opzione nella mia situazione.

    
posta Ahmet 19.06.2018 - 09:28
fonte

2 risposte

1

Ciò di cui hai veramente bisogno è un Pool di oggetti con una dimensione di pool di 8. È abbastanza semplice implementare un pool di oggetti utilizzando la BufferBlock classe.

    
risposta data 19.06.2018 - 10:32
fonte
1

Dovresti completare l'inizializzazione e le successive chiamate alla lib di venditori con un semaforo per evitare troppe istanze. Qualsiasi richiesta in arrivo al raggiungimento del limite specificato verrà automaticamente messa in coda.

    
risposta data 19.06.2018 - 10:32
fonte

Leggi altre domande sui tag