有人知道在REST请求期间发生错误时如何从上游系统返回错误吗?
例如,如果我们有三个微服务:A,B和C。整个调用方案为:A-> B-> C。这里是REST。
当B向C发送REST请求时,C内将发生错误(类似于5 **的HTTP错误),从而导致500个HTTP错误代码作为对B的请求的答案。
目标是将该错误传递给初始微服务-A。
此任务很简单,在同步交互的情况下不需要很多工作,但是当我使用异步交互时,事情变得更加复杂。
在这里,我尝试借助“ CompletableFuture”来把握来自服务C的请求,然后尝试将响应传递到初始服务-A:
这段代码位于调用服务C的服务B中。
var future: CompletableFuture<CarInfoDto>? = null
try {
future = CompletableFuture.supplyAsync {
runBlocking {
myService.getCarInfo(carId)
}
}
return ResponseEntity(future?.get(1000, TimeUnit.MILLISECONDS), HttpStatus.OK)
} catch (timeoutException: TimeoutException) {
future?.thenApply { resp: CarInfoDto? ->
resp?.let { Mono.just(it) }?.let {
restClient
.post()
.uri(http://address_to_service_a.com)
.accept(MediaType.APPLICATION_JSON)
.body(it, CarInfoDto::class.java)
.exchange().block()
}
}
}
被调用的方法放在服务C上,这是它的签名:
suspend fun getCarInfo(carId: String): CarInfoDto? {
...
}
问题是-如何将类似5xx的错误从服务C传输到服务A?
p.s。没有错误发生时,从C到A的数据传输就没有问题。