java - 在不休眠或阻塞线程的情况下重试任务
问题描述
我想要一个重试机制,如果任务失败,应该在一段时间后重试,而不阻塞或休眠任何线程。
例如,假设我的 maxRetryAttempt 为 3,重试间隔为 3 秒。我有任务 1,2,3,..10 的列表,工作线程选择任务 1。如果任务 1 现在失败并且我想重试它,但下一次重试尝试是在 3 秒后。在这里,我不想让我的线程进入睡眠状态。取而代之的是,我想将任务放入某个队列中,并且工作线程应该在 3 秒后准确地选择该任务以重试该任务。
我检查了一些现有的库,例如 spring-retry。这些是图书馆在另一次尝试之前完成一项工作并让一个线程进入睡眠状态。这样所有任务在放弃之前都需要 9 秒(假设最坏的情况,所有任务都由于某些问题而失败)。在这种情况下,10 个不同的工作线程正在被填充并且都在等待。
是否有任何符合我期望的库或设计模式或想法?
解决方案
您可能想查看 RxJava 库:http ://reactivex.io/
它有一个用于异步操作的运算符,可以完全按照您的意愿执行操作: retryWhen
推荐阅读
- android - 如何在 Android 应用程序中结合 RxJava Single & Completable Retrofit 调用
- java - 在springboot中使用REST使用带有jwt令牌的uri
- asp.net - Response.AddHeader("Location", "www.xyz.com") 将现有域添加到重定向的 url,如 currentdomain/www.xyz.com
- drupal - Drupal 重复面包屑
- android - LiveData:通过 DialogFragment 的对话框在方向更改后重新创建两次
- php - 将laravel中的created_at列转换为whereBetween查询中的ymd格式
- raspberry-pi - uv4l-server URL 的问题
- java - Spring Boot:分离 WS 和 MVC 请求处理
- oracle - 使用 SQL PLUS 从客户端计算机编译 Oracle 包
- sql - 根据另一个表中列的可用性更新单元格