| Crates.io | reinhardt-tasks |
| lib.rs | reinhardt-tasks |
| version | 0.1.0-alpha.1 |
| created_at | 2026-01-23 04:34:03.312493+00 |
| updated_at | 2026-01-23 04:34:03.312493+00 |
| description | Background task execution and scheduling |
| homepage | |
| repository | https://github.com/kent8192/reinhardt-rs |
| max_upload_size | |
| id | 2063427 |
| size | 436,510 |
Background task processing
Background task queue for executing long-running or scheduled tasks asynchronously.
Supports task scheduling, retries, task priorities, and multiple worker processes.
Add reinhardt to your Cargo.toml:
[dependencies]
reinhardt = { version = "0.1.0-alpha.1", features = ["tasks"] }
# Or use a preset:
# reinhardt = { version = "0.1.0-alpha.1", features = ["standard"] } # Recommended
# reinhardt = { version = "0.1.0-alpha.1", features = ["full"] } # All features
Then import task features:
use reinhardt::tasks::{Task, TaskQueue, TaskExecutor};
use reinhardt::tasks::backend::{TaskBackend, RedisTaskBackend};
Note: Task features are included in the standard and full feature presets.
TaskId): UUID-based unique identifierPending: WaitingRunning: ExecutingSuccess: Completed successfullyFailure: FailedRetry: Retryingenqueue)dequeue)get_status)update_status)redis-backend): Redis-based distributed task queue
database-backend): SQLite-based task persistence
rabbitmq-backend): RabbitMQ-based message queue
store_result)get_result)delete_result)exponential_backoff)fixed_delay)no_retry)ExecutionFailed)TaskNotFound)QueueError)SerializationFailed)Timeout)MaxRetriesExceeded)The RabbitMQ backend provides production-ready message queue integration:
use reinhardt::tasks::backends::rabbitmq::{RabbitMQBackend, RabbitMQConfig, DeliveryMode};
let config = RabbitMQConfig {
uri: "amqp://localhost:5672".to_string(),
queue_name: "my_tasks".to_string(),
prefetch_count: 10,
delivery_mode: DeliveryMode::Persistent,
};
let backend = RabbitMQBackend::new(config).await?;
uri: RabbitMQ connection URI (e.g., amqp://user:pass@host:5672/vhost)queue_name: Name of the queue to use for tasksprefetch_count: Number of tasks to prefetch per worker (default: 1)delivery_mode: Persistent or Transient message delivery| Mode | Description | Use Case |
|---|---|---|
Persistent |
Messages survive broker restart | Production tasks |
Transient |
Messages lost on broker restart | Low-priority tasks |
The metadata store provides task metadata persistence separate from the task queue:
use reinhardt::tasks::backends::metadata_store::{MetadataStore, TaskMetadata, TaskStatus};
// Store task metadata
let metadata = TaskMetadata {
id: "task-123".to_string(),
name: "process_order".to_string(),
status: TaskStatus::Pending,
created_at: Utc::now(),
updated_at: Utc::now(),
task_data: serde_json::json!({"order_id": 456}),
};
store.store(metadata)?;
// Update task status
store.update_status("task-123", TaskStatus::Running)?;
// Retrieve metadata
let metadata = store.get("task-123")?;
| Backend | Persistence | Scalability | Use Case |
|---|---|---|---|
| Dummy | No | - | Unit testing |
| Immediate | No | Single process | Development, synchronous tasks |
| Redis | Yes | High | Production, caching |
| RabbitMQ | Yes | Very High | Production, messaging, complex routing |
| SQLite | Yes | Low | Small-scale production, embedded |
ImmediateBackend for simplicityDummyBackend or InMemoryMetadataStoreSqliteBackendRabbitMQBackend or RedisTaskBackendRabbitMQBackend for exchange-based routingRedis backend tests are executed using TestContainers:
cargo test --package reinhardt-tasks --features all-backends
Tests run serially with #[serial(redis)] attribute to prevent Redis container conflicts.