小编tsv*_*lad的帖子

重试 Reactor 中的特定异常

我有微服务应用程序。为了进行协作,每个服务都使用异步消息传递。我知道,spring data jpa默认使用乐观锁。但是,如果这种锁定方法不是由用户调用,而是由另一个服务调用(在我的示例中,有验证服务,可以将对象的状态更新为有效或无效),我想处理异常并重试更新对象。我还必须在这个微服务上使用 webflux 堆栈。现在我有这样的代码:

public void updateStatus(String id, EventStatus status) {
    eventRepository.findById(id)
            .doOnNext(eventDocument -> {
                eventDocument.setStatus(status);
                eventRepository.save(eventDocument).subscribe();
            }).doOnError(OptimisticLockingFailureException.class, exception -> { //Retry in 2 sec if optimistic lock occurs on update
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }
                updateStatus(id, status);
            })
            .subscribe();
}
Run Code Online (Sandbox Code Playgroud)

我不喜欢这里的递归。对此有更好的解决方案吗?

java spring spring-data-jpa project-reactor spring-webflux

3
推荐指数
1
解决办法
2081
查看次数