Bir aktör havuzunun kullandığı paylaşılan bir dış kaynağa (bir dosya deposu diyelim) sahibim. Dosyaya yeni bir istek yapıldığında, istekte bulunan harici sisteme bir başvuruyla doldurmak için yeni bir aktör yaratılır.Akka Circuit Breaker Aktörler arasında paylaşım
Aktör başına bir devre kesici oluşturduğum geçerli yaklaşım, Bu dış kaynak üzerinde bir dizi işlem gerçekleştiren her 'talep' için yeni aktör yaratılır.
İdeal değil - çok fazla CB örneği;
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()
}
}
Daha İyi Bir Yaklaşım - Bir CB ref geçmesi;
class MySharedResourceActor(externalResourceRef: ExtSystem, val breaker: CircuitBreaker) extends Actor with ActorLogging {
def receive = {
case SomeExternalOp =>
breaker.withSyncCircuitBreaker(dangerousCallToExternalSystem()) pipeTo sender()
}
}
o dinamik olarak oluşturulan veya başka türlü de dış sisteme bir başvuru korur ve bir yönlendirici havuzda birden aktörler arasındaki bu devre kesiciyi paylaşan ana aktör bir Kesici referans geçmesine güvenli mi?