kotlin - 使用 Resilience4j 和 WebClient 的正确方法
问题描述
我正在编写一个断路器包装器,它应该封装 http 调用(使用 Spring WebClient )。所有的集成服务都将调用 invokeService() 方法,该方法又调用 excecute()。
现在,如果 execute() 成功了,那很好。如果不是,断路器应在 n 次故障后触发(基于配置)。这就是我所做的。不确定这是否可行(因为 Mono)以及正确的方法。
@Service
class CircuitBreakerWrapper @Inject constructor(cbService: CircuitBreakerService?)
: BaseHttpExcecutor() {
private var cbService = cbService
fun <R> invokeService(
service: String,
webClient: WebClient,
HttpRequestSpec httpRequestSpec,
cbProperties: CircuitBreakerProperties?,
type: Class<R>?): Mono<R> {
val circuitBreaker = cbService
.registerCircuitBreaker(serviceName, properties)
val supplier: Supplier<Mono<R>> = Supplier {
execute(webClient, httpRequestSpec, type)
}
val decoratedSupplier = CircuitBreaker
.decorateSupplier(circuitBreaker, supplier)
return Try.ofSupplier(decoratedSupplier).get()
}
}
这就是 execute() 的样子:
webClient.method(HttpMethod.GET)
.uri(url, params)
.retrieve()
.bodyToMono(response)
解决方案
推荐阅读
- python - 我的硒程序找不到元素
- python - 从数据框列中提取异常
- python - 使用 Google Sheet 公式计算归一化分数
- java - 如何在Android中创建一个实例来调用一个活动的方法到一个服务类?
- php - 单个 MySQL 列中的首选项列表
- docker - 将环境变量添加到包含以下内容的 Docker 文件中:
- ansible - 有没有办法在 Ansible 中显示已注册的处理程序或侦听器?
- rendering - 我们可以根据到相机的距离来控制 Viewer 中的渐进式渲染吗?
- java - 线程在终止之前不会输出流
- c++ - 使用 g++ 编译包含根库的 c++