के बीच अक्का सर्किट ब्रेकर साझाकरण मेरे पास एक साझा बाहरी संसाधन है (एक फ़ाइल स्टोर कहें) जो कलाकारों का एक पूल उपयोग कर रहा है। प्रत्येक बार फ़ाइल स्टोर में एक नया अनुरोध किया जाता है, जिसमें एक नया अभिनेता बनाया गया बाहरी सिस्टम के संदर्भ के साथ अनुरोध को भरने के लिए बनाया गया है।अभिनेता
वर्तमान दृष्टिकोण जहां मैं प्रति अभिनेता सर्किट ब्रेकर बनाता हूं, इस उद्देश्य को हरा देता है नया अभिनेता प्रत्येक 'अनुरोध' के लिए बनाया गया है जो इस बाहरी संसाधन पर संचालन का अनुक्रम करता है।
आदर्श नहीं - बहुत सारे सीबी उदाहरण;
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()
}
}
यह माता पिता अभिनेता जो भी बाहरी प्रणाली के लिए एक संदर्भ रखता है और एक रूटर पूल में कई अभिनेताओं के बीच इस सर्किट ब्रेकर का हिस्सा से एक सर्किट ब्रेकर संदर्भ में पारित करने के लिए, डायनामिक रूप से तैयार है या नहीं तो सुरक्षित है?