首页 > 解决方案 > 在不休眠或阻塞线程的情况下重试任务

问题描述

我想要一个重试机制,如果任务失败,应该在一段时间后重试,而不阻塞或休眠任何线程。

例如,假设我的 maxRetryAttempt 为 3,重试间隔为 3 秒。我有任务 1,2,3,..10 的列表,工作线程选择任务 1。如果任务 1 现在失败并且我想重试它,但下一次重试尝试是在 3 秒后。在这里,我不想让我的线程进入睡眠状态。取而代之的是,我想将任务放入某个队列中,并且工作线程应该在 3 秒后准确地选择该任务以重试该任务。

我检查了一些现有的库,例如 spring-retry。这些是图书馆在另一次尝试之前完成一项工作并让一个线程进入睡眠状态。这样所有任务在放弃之前都需要 9 秒(假设最坏的情况,所有任务都由于某些问题而失败)。在这种情况下,10 个不同的工作线程正在被填充并且都在等待。

是否有任何符合我期望的库或设计模式或想法?

标签: javamultithreadingspring-bootretry-logic

解决方案


您可能想查看 RxJava 库:http ://reactivex.io/

它有一个用于异步操作的运算符,可以完全按照您的意愿执行操作: retryWhen


推荐阅读