निम्नलिखित कार्यान्वयन की बात कर में उल्लेख किया है:स्रोत कतार कार्यान्वयन थ्रेड का उपयोग कर अक्का-http में कनेक्शन पूलिंग सुरक्षित है?
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()
इसे सुरक्षित थ्रेड है एक से अधिक थ्रेड से कतार HTTP अनुरोध पेशकश करने के लिए? यदि यह नहीं है, तो ऐसी आवश्यकता को लागू करने का सबसे अच्छा तरीका क्या है? शायद एक समर्पित अभिनेता का उपयोग कर?
आप अपनी टिप्पणी के लिए बहुत बहुत धन्यवाद। मुझे बफर ओवरफ़्लो के मामले में किसी प्रकार की विफलता को इंगित करने की आवश्यकता है, जैसे कि वापसी Future.failed (BufferFlowException), जो मेरी समझ के लिए Source.actorRef का उपयोग करके लागू नहीं किया जा सकता है। स्रोत कतार QueueOfferResult API का उपयोग कर विवरण फिट बैठता है। –
@Nik मुझे अभी भी लगता है कि मैंने मूल प्रश्न का सही उत्तर दिया है। आपकी नई आवश्यकता के लिए, मैं वास्तव में कतार को संभालने में विशेष रूप से एक अभिनेता को लागू करता हूं। इसे 'queue.offer (???) पाइप टू स्वयं' का उपयोग करके कतार में जोड़ना होगा, और उसके बाद यह 'प्राप्तकर्ता' विधि में 'QueueOfferResult' के विभिन्न उपप्रकारों को संभालने में विफलता पर प्रतिक्रिया करने में सक्षम होगा। –
अभिनेता मेलबॉक्स ओवरफ़्लो को रोकने के लिए आप 'NonBlockingBoundedMailbox' (http://doc.akka.io/docs/akka/current/scala/mailboxes.html) का उपयोग कर सकते हैं। – khiramatsu