Web services Akka Http断路器

Web services Akka Http断路器,web-services,scala,akka,akka-http,circuit-breaker,Web Services,Scala,Akka,Akka Http,Circuit Breaker,使用断路器模式时,是否可以将所有外部服务调用封装在传递给.withCircuitBreaker()的方法中,或者每个调用本身都应该传递给.withCircuitBreaker()? 例如 更新:如果是web服务,是否可以在mainActorSystem中注册断路器,或者我应该使用单独的circuitBreakerActorSystem?视情况而定。当只有一个服务失败时,调用方能否生存?我的意思是,假设只有externalCall2失败,您的服务才能继续运行,还是需要两个调用都工作 如果您高度依赖

使用断路器模式时,是否可以将所有外部服务调用封装在传递给
.withCircuitBreaker()
的方法中,或者每个调用本身都应该传递给
.withCircuitBreaker()
? 例如


更新:如果是web服务,是否可以在
mainActorSystem
中注册断路器,或者我应该使用单独的
circuitBreakerActorSystem

视情况而定。当只有一个服务失败时,调用方能否生存?我的意思是,假设只有
externalCall2
失败,您的服务才能继续运行,还是需要两个调用都工作

如果您高度依赖这两个调用,那么将这两个调用都包装起来听起来是个好主意。如果
externalCall2
失败并且您需要两者,则调用
externalCall1
没有意义。这里的建议是在电路开路时进行某种后备/后备

如果不是这样,调用是相互独立的,那么您可能应该为每个调用分别设置断路器。同样,当电路开路时,您可以进行某种备份/回退


一种可能的回退/备份方法是使用缓存,并在电路开路时返回缓存的值。这是一个很好的选择。它可以与进程内缓存(如Redis)一起工作,也可以与Redis一起工作,并具有异步/同步API。

在我的场景中,调用是相关的,您建议使用什么作为缓存?我已编辑了答案,以添加有关缓存的更多信息。
// wrapped
def  wrapper(param: T) : Future[Option[T]] = {
     externalCall1(param)
     externalCall2(param)
}

circuitBreaker.withCircuitBreaker(wrapper(someParam))

// one-by-one
circuitBreaker.withCircuitBreaker(externalCall1(param))
circuitBreaker.withCircuitBreaker(externalCall2(param))