Ho un servizio (chiamiamolo Servizio A) che utilizza Akka Server HTTP per gestire le richieste in arrivo. Inoltre ho un'applicazione di terze parti (servizio B) che fornisce diversi servizi web. Lo scopo del servizio A è trasformare le richieste dei client, chiamare uno o più servizi Web del servizio B, unire/trasformare i risultati e restituirli a un cliente.Come chiamare correttamente un singolo server da più attori/gestori web usando Akka HTTP?
Sto utilizzando gli attori per alcune parti e solo il futuro per gli altri. Per effettuare una chiamata al servizio B, utilizzo il client HTTP Akka.
Http.get(actorSystem).singleRequest(HttpRequest.create()
.withUri("http://127.0.0.1:8082/test"), materializer)
.onComplete(...)
Il problema è, un nuovo flusso viene creato per ogni servizio A richiesta, e se ci sono più connessioni simultanee, si traduce in akka.stream.OverflowStrategy$Fail$BufferOverflowException: Exceeded configured max-open-requests value of [32] error
ho già fatto questa domanda e ottenuto un suggerimento di utilizzare un singolo flusso How to properly call Akka HTTP client for multiple (10k - 100k) requests?
Mentre funziona per un gruppo di richieste provenienti da un singolo luogo, non so come utilizzare un singolo flusso da tutti i miei gestori simultanei di richieste.
Qual è la corretta "via Akka" per farlo?
Bello, grazie! In realtà ho contattato gli sviluppatori sul gitter e ho anche ricevuto un suggerimento per utilizzare Source.queue e promesse. Ma non avevo ancora il tempo di provarlo. Con il tuo codice sarà più facile! – relgames
@khiramatsu hai un esempio in Java? – Tiago
@khiramatsu Questa coda può essere offerta da più thread? – Vigneshwaran