2014-06-18 11 views
12

के बीच अक्का सर्किट ब्रेकर साझाकरण मेरे पास एक साझा बाहरी संसाधन है (एक फ़ाइल स्टोर कहें) जो कलाकारों का एक पूल उपयोग कर रहा है। प्रत्येक बार फ़ाइल स्टोर में एक नया अनुरोध किया जाता है, जिसमें एक नया अभिनेता बनाया गया बाहरी सिस्टम के संदर्भ के साथ अनुरोध को भरने के लिए बनाया गया है।अभिनेता

वर्तमान दृष्टिकोण जहां मैं प्रति अभिनेता सर्किट ब्रेकर बनाता हूं, इस उद्देश्य को हरा देता है नया अभिनेता प्रत्येक 'अनुरोध' के लिए बनाया गया है जो इस बाहरी संसाधन पर संचालन का अनुक्रम करता है।

आदर्श नहीं - बहुत सारे सीबी उदाहरण;

class MySharedResourceActor(externalResourceRef: ExtSystem) extends Actor with ActorLogging { 
    val breaker = new CircuitBreaker(context.system.scheduler, 
    maxFailures = 5, 
    callTimeout = 10.seconds, 
    resetTimeout = 1.minute).onOpen(notifyMeOnOpen()) 

    def receive = { 
     case SomeExternalOp => 
      breaker.withSyncCircuitBreaker(dangerousCallToExternalSystem()) pipeTo sender() 
    } 
} 

बेहतर दृष्टिकोण - एक सीबी रेफरी में पारित;

class MySharedResourceActor(externalResourceRef: ExtSystem, val breaker: CircuitBreaker) extends Actor with ActorLogging { 
    def receive = { 
     case SomeExternalOp => 
      breaker.withSyncCircuitBreaker(dangerousCallToExternalSystem()) pipeTo sender() 
    } 
} 

यह माता पिता अभिनेता जो भी बाहरी प्रणाली के लिए एक संदर्भ रखता है और एक रूटर पूल में कई अभिनेताओं के बीच इस सर्किट ब्रेकर का हिस्सा से एक सर्किट ब्रेकर संदर्भ में पारित करने के लिए, डायनामिक रूप से तैयार है या नहीं तो सुरक्षित है?

उत्तर

9

हां इस दृष्टिकोण का पालन करना सुरक्षित है। हम संबंधित कलाकारों (पूल या अन्यथा) में सर्किट ब्रेकर साझा करते हैं जो एक ही होस्ट को http कॉल कर रहे हैं। यदि आपने ऐसा नहीं किया है, और प्रत्येक उदाहरण के पास अपना स्वयं का ब्रेकर होता है, भले ही वे लंबे समय तक रहते थे, तो ब्रेकर खोले जाने से पहले प्रत्येक को असफल असफलता को मारने की आवश्यकता होगी और मुझे संदेह है कि यह वह व्यवहार है जिसे आप चाहते हैं। साझा करके, यह कई कलाकारों को ब्रेकर में आंकड़े (विफलता, सफलताओं) का योगदान करने की अनुमति देता है ताकि ब्रेकर संसाधन में जाने वाली सभी कॉल का प्रतिनिधि हो।

अक्का के कोड को देखते हुए, वे राज्य का प्रतिनिधित्व करने और राज्य संक्रमणों को संभालने के लिए सर्किट ब्रेकर के अंदर परमाणुओं का उपयोग कर रहे हैं, इसलिए उन्हें कई कलाकारों में उपयोग करने के लिए सुरक्षित होना चाहिए।

संबंधित मुद्दे