如何将错误记录到数据库并在项目反应器中恢复执行?
How to log error to DB and resume execution in project reactor?
我想将错误记录到 mongo 数据库集合并继续在管道中传播错误。我怎样才能在项目反应器中做到这一点?
当前代码使用提取器(Mono.block()
),据我所知,不建议使用它。这是当前代码的样子:
testMono.doOnError(throwable -> {
var errorObject = ErrorObject.builder()
.message(throwable.getLocalizedMessage())
.className(throwable.getClass().getSimpleName())
.build();
errorMessageRepository.save(errorObject).block();
})
这是正确的方法还是我应该在这里使用 Mono.subscribe()
?
您应该避免使用 block()
。
如果您需要 即发即弃 调用,您可以使用 subscribe()
:
testMono.doOnError(throwable -> {
var errorObject = ErrorObject.builder()
.message(throwable.getLocalizedMessage())
.className(throwable.getClass().getSimpleName())
.build();
errorMessageRepository.save(errorObject).subscribe();
})
请注意,在这种情况下,您将失去背压支持。
或者,您可以像这样使用 onErrorResume
运算符:
testMono.onErrorResume(throwable -> {
var errorObject = ErrorObject.builder()
.message(throwable.getLocalizedMessage())
.className(throwable.getClass().getSimpleName())
.build();
return errorMessageRepository.save(errorObject).then(Mono.error(throwable)));
});
这样,then
操作员会按原样重播错误。
我想将错误记录到 mongo 数据库集合并继续在管道中传播错误。我怎样才能在项目反应器中做到这一点?
当前代码使用提取器(Mono.block()
),据我所知,不建议使用它。这是当前代码的样子:
testMono.doOnError(throwable -> {
var errorObject = ErrorObject.builder()
.message(throwable.getLocalizedMessage())
.className(throwable.getClass().getSimpleName())
.build();
errorMessageRepository.save(errorObject).block();
})
这是正确的方法还是我应该在这里使用 Mono.subscribe()
?
您应该避免使用 block()
。
如果您需要 即发即弃 调用,您可以使用 subscribe()
:
testMono.doOnError(throwable -> {
var errorObject = ErrorObject.builder()
.message(throwable.getLocalizedMessage())
.className(throwable.getClass().getSimpleName())
.build();
errorMessageRepository.save(errorObject).subscribe();
})
请注意,在这种情况下,您将失去背压支持。
或者,您可以像这样使用 onErrorResume
运算符:
testMono.onErrorResume(throwable -> {
var errorObject = ErrorObject.builder()
.message(throwable.getLocalizedMessage())
.className(throwable.getClass().getSimpleName())
.build();
return errorMessageRepository.save(errorObject).then(Mono.error(throwable)));
});
这样,then
操作员会按原样重播错误。