小编Але*_*нов的帖子

Project Reactor async在发生错误时重试发送电子邮件

我需要在用户注册后发送一些数据.我想在主线程中首次尝试,但如果有任何错误,我想以10分钟的间隔重试5次.

@Override
public void sendRegisterInfo(MailData data) {
    Mono.just(data)
        .doOnNext(this::send)
        .doOnError(ex -> logger.warn("Main queue {}", ex.getMessage()))
        .doOnSuccess(d -> logger.info("Send mail to {}", d.getRecipient()))
        .onErrorResume(ex -> retryQueue(data))
        .subscribe();
}

private Mono<MailData> retryQueue(MailData data) {
    return Mono.just(data)
               .delayElement(Duration.of(10, ChronoUnit.MINUTES))
               .doOnNext(this::send)
               .doOnError(ex -> logger.warn("Retry queue {}", ex.getMessage()))
               .doOnSuccess(d -> logger.info("Send mail to {}", d.getRecipient()))
               .retry(5)
               .subscribe();
}
Run Code Online (Sandbox Code Playgroud)

有用.但是我有一些问题:

  1. 我是否纠正了在doOnNext功能上进行操作?
  2. 用于delayElement在执行之间延迟是否正确?
  3. 等待延迟时线程是否被阻止?
  4. 什么是对错误进行重试并在其间进行延迟的最佳实践?

java project-reactor

2
推荐指数
1
解决办法
1939
查看次数

标签 统计

java ×1

project-reactor ×1