odnosząc się do poniższego realizacji wymienionych w:Czy łączenie połączeń w akka-http przy użyciu wątku źródłowego implementacji jest bezpieczne?
http://doc.akka.io/docs/akka-http/10.0.5/scala/http/client-side/host-level.html
val poolClientFlow = Http().cachedHostConnectionPool[Promise[HttpResponse]]("akka.io")
val queue =
Source.queue[(HttpRequest, Promise[HttpResponse])](QueueSize, OverflowStrategy.dropNew)
.via(poolClientFlow)
.toMat(Sink.foreach({
case ((Success(resp), p)) => p.success(resp)
case ((Failure(e), p)) => p.failure(e)
}))(Keep.left)
.run()
Czy wątku bezpieczne zaoferować kolejki żądań HTTP z wielu wątków? Jeśli tak nie jest, jaki jest najlepszy sposób na wdrożenie takiego wymogu? może używając dedykowanego aktora?
Dziękuję bardzo za komentarz. Mam wymóg sygnalizowania jakiegoś błędu w przypadku przepełnienia bufora, np. Return Future.failed (BufferFlowException), który według mojego zrozumienia nie może zostać zaimplementowany przy użyciu Source.actorRef. Kolejka źródłowa pasuje do opisu za pomocą interfejsu API QueueOfferResult. –
@Nik Nadal uważam, że odpowiedziałem prawidłowo na oryginalne pytanie. Jeśli chodzi o twoje nowe wymagania, wtedy naprawdę zaimplementowałbym aktora specjalizującego się w obsłudze kolejki. Musiałby dodać do kolejki za pomocą 'queue.offer (???) pipeTo self', a następnie byłby w stanie zareagować na niepowodzenie, posługując się różnymi podtypami' QueueOfferResult' w swojej metodzie 'receive'. –
Aby zapobiec przepełnieniu skrzynki pocztowej aktora, możesz użyć 'NonBlockingBoundedMailbox' (http://doc.akka.io/docs/akka/current/scala/mailboxes.html). – khiramatsu