12
我有一個演員正在使用的共享外部資源(比如文件存儲)。每次向文件存儲器發出新的請求時,都會創建一個新的參與者以填充請求,並引用傳入的外部系統。Akka Circuit Breaker在演員之間分享
當前我爲每個參與者創建斷路器的方法違背了作爲爲每個對這個外部資源執行一系列操作的'請求'創建新的actor。
不理想 - 太多的CB實例;
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()
}
}
較好的方法 - 通過在CB REF;
class MySharedResourceActor(externalResourceRef: ExtSystem, val breaker: CircuitBreaker) extends Actor with ActorLogging {
def receive = {
case SomeExternalOp =>
breaker.withSyncCircuitBreaker(dangerousCallToExternalSystem()) pipeTo sender()
}
}
它是安全的從父演員也保持與外部系統的引用,並在路由器池共享多個參與者之間的這種斷路器斷路器引用傳遞,動態創建或以其他方式?