2014-06-18 24 views
12

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?

cevap

9

Evet, bu yaklaşımı takip etmek güvenlidir. Devre kesicileri, aynı ana bilgisayara http çağrıları yapan ilgili aktörler (havuzlanmış veya başka bir şekilde) arasında paylaşıyoruz. Bunu yapmadıysanız ve her örneğin kendi kesicisine sahip olmasına izin verdiyseniz, uzun ömürlü örnekler olsa bile, her birinin arıza eşiğini açılmadan önce ayrı ayrı vurması gerekir ve bunun istediğiniz davranış olduğundan şüphe duyarım. Paylaşarak, birden fazla aktörün kesiciye istatistik (başarısızlık, başarı) katmasına izin verir, böylece kesicinin kaynağa giren tüm çağrıları temsil etmesi sağlanır.

Akka'nın koduna bakarak, devleti temsil etmek ve durum geçişlerini işlemek için devre kesicinin içinde atomik kullanıyorlar, böylece birden çok aktörde kullanılmaları güvenli olmalıdır.

İlgili konular