Feature List
This feature list is incomplete, at present the focus is on determining what will work well for the particular patterns JetStream enables, so there might be some churn in the feature set here.
Tasks
- Task definitions stored post-processing, with various retention and discard policies
- Ability to retry a Task that has already been completed or failed
- Task deduplication
- Deadline per task - after this time the task will not be processed
- Tasks can depend on other tasks
- Max tries per task, capped to the queue tries
- Task state tracked throughout it’s lifecycle
- K-Sortable Task GUIDs
- Lifecycle events published about changes to task states
See Task Lifecycle for full background and details
Queues
- Queues can store different types of task
- Queues with caps on queued items and different queue-full behaviors
- Default or user supplied queue definitions
- Queue per client, many clients per queue
Processing
- Retries of failed tasks with backoff schedules configurable using
RetryBackoffPolicy()
. Handler opt-in early termination. - Parallel processing of tasks, horizontally or vertically scaled. Run time adjustable upper boundary on a per-queue basis
- Worker crashes does not impact the work queue
- Handler interface with task router to select appropriate handler by task type with wildcard matches
- Support for Handlers in all NATS Supported languages using Remote Handlers
- Statistics via Prometheus
Storage
- Replicated storage using RAFT protocol within JetStream Streams, disk based or memory based
- KV for configuration and schedule storage
- KV for leader elections
Scheduled Tasks
- Cron like schedules creating tasks on demand
- HA capable Scheduler process integrated with
ajc
- Prometheus monitoring
- CLI CRUD operations via
ajc task cron
See Scheduled Tasks
Misc
- Supports NATS Contexts for connection configuration
- Supports custom loggers, defaulting to go internal
log
Command Line
- Various info and state requests
- Configure aspects of Task and Queue storage
- Watch task processing
- Process tasks via shell commands
- CRUD on Tasks store or individual Task
- CRUD on Scheduled Tasks
Planned Features
A number of features are planned in the near term, see our GitHub Issues