durable_queue 0.3.0
durable_queue: ^0.3.0 copied to clipboard
A backend-agnostic persistent task queue for Dart and Flutter with retries, backoff, concurrency control, and recovery.
0.3.0 #
Orchestration: priorities, dependencies, chains, and groups.
- Add
prioritytoenqueue. Among ready tasks, higher priority starts first; equal priorities keep enqueue order. - Add
dependsOnandonDependencyFailuretoenqueue. A task waits in the newTaskStatus.waitingstate until its dependencies complete. If one fails, is cancelled, or is missing,DependencyFailurePolicycancels the task (the default), fails it, or runs it anyway. Outcomes cascade to further dependents, and the blocking dependency is recorded as aDependencyFailedExceptioninlastFailure. - Add
enqueueChainto store tasks that run one after another. - Add
grouptoenqueue,getTasks(group:), andcancelGroup. retryrestores a task towaitingwhile its dependencies are still active, and refuses while a dependency has not completed.deleteandpurgenever remove a task that a waiting task depends on.- Dependents are written before the task that settles them, so a crash cannot leave a task waiting behind a finished dependency. Startup still uses only bounded queries.
- Add
example/orchestration.dart.
Breaking changes #
TaskStatushas a new value,waiting. Exhaustiveswitchstatements overTaskStatusneed a case for it. It is declared last, so the index of every existing value is unchanged.waitingis active: it blocks deduplication keys and counts forisActive.- Custom
QueueStorageadapters must implementgetWaitingDependentsandgetByGroup, persist the newStoredTaskfields (priority,dependsOn,onDependencyFailure,group), and ordergetNextReadyby priority first (compareReadyTasks). SeeSTORAGE.md. Records stored by earlier versions load with default values, so no data migration is needed.
0.2.0 #
- Add
DurableQueue.retryto re-queue a failed or cancelled task with a fresh attempt budget and an optional replacement retry policy. - Add
DurableQueue.deleteandDurableQueue.purgeso finished tasks no longer accumulate in storage forever.purgefilters by terminal status and age. - Add
DurableQueue.closeandisClosedto stop the worker and close theeventsandstorageErrorsstreams. - Add
TaskStatus.isTerminalandTaskStatus.isActive. - Fix four unresolved dartdoc references and the
TaskStatusstate diagram (due retries move straight torunning). - Add
issue_trackerandtopicsto the pubspec. - No storage contract changes: existing
QueueStorageadapters keep working. - The storage contract for adapter authors now lives in
STORAGE.mdat the package root.
0.1.0 #
- Initial release of the durable task queue.
- Serializable tasks with immutable payload snapshots and isolated execution attempts.
- Indexed in-memory storage, bounded worker queries, and a documented storage contract.
- Constant-delay and exponential retries, jitter, retry predicates, and attempt limits.
- Concurrency limits, deduplication, idempotency metadata, and cancellation.
- Pause, resume, and stop controls.
- Lifecycle events, task queries, and failure metadata.
- Batched startup recovery for interrupted tasks.
- Automatic retries of worker storage operations without rerunning handlers, with a storage error stream and configurable retry delay.
- An injectable clock so retry tests do not wait on real time.