Ho un endpoint di un servizio Web che utilizza una risorsa mutabile da una libreria Java. L'endpoint del servizio Web può ricevere più query contemporaneamente. (l'endpoint è implementato usando Ring/Compojure). La creazione di queste risorse è costosa, quindi la loro creazione per ogni chiamata al servizio Web è davvero inefficiente.Il modo migliore per gestire un pool di risorse in Clojure
Quello che voglio fare è creare uno pool
di quella risorsa che popolino all'avvio del servizio web. Quindi, ogni volta che viene chiamato l'endpoint, prende una risorsa dal pool, la utilizza per l'elaborazione, quindi la reinserisce nel pool e attende che si verifichi la prossima chiamata.
Mi chiedo quale sarebbe il modo migliore per farlo in Clojure? Esiste una libreria "pool" di Clojure che potrebbe aiutarmi?
Ho cercato ingenuamente di implementarlo utilizzando un vettore in un atomo in cui ogni elemento del vettore è quella risorsa. Tuttavia, ha rapidamente imparato che non potrebbe funzionare in questo modo.
Se non ti dispiace un po 'pesanti Java interoperabilità, il [Apache Commons Pool] (https://commons.apache.org/proper/commons- pool /) la biblioteca è sempre lì. – ez121sl