⚠️ EXPERIMENTAL⚠️ This project is experimental and under active development. It is not recommended for production use. APIs may change without notice, and there may be bugs or missing features.
A MS-SQL/Azure SQL provider implementation for Duroxide, a durable task orchestration framework for Rust.
- ✅ Full implementation of
ProviderandProviderAdmintraits - ✅ T-SQL stored procedures for atomic operations
- ✅ Azure SQL and on-premise MS-SQL support
- ✅ Connection pooling via bb8 + tiberius
- ✅ Custom schema support for multi-tenant isolation
- ✅ Automatic schema migration on startup
- ✅ Poison message detection with attempt count tracking
- ✅ Lock renewal for long-running orchestrations and activities
Add to your Cargo.toml:
[dependencies]
duroxide-sql = { git = "https://github.com/affandar/duroxide-sql" }
duroxide = { git = "https://github.com/affandar/duroxide" }use duroxide_sql::MssqlProvider;use duroxide::runtime::Runtime;use std::sync::Arc;#[tokio::main]asyncfnmain() -> anyhow::Result<()>{// Create provider with connection stringlet provider = MssqlProvider::new("server=tcp:myserver.database.windows.net,1433;database=mydb;user=myuser;password=mypass;encrypt=true").await?;// Use with Duroxide runtimelet runtime = Runtime::start_with_store(Arc::new(provider),
activity_registry,
orchestration_registry,).await;Ok(())}For multi-tenant isolation or testing:
let provider = MssqlProvider::new_with_schema("server=tcp:myserver.database.windows.net,1433;database=mydb;user=myuser;password=mypass",Some("my_schema"),).await?;| Environment Variable | Description | Default |
|---|---|---|
DUROXIDE_SQL_POOL_MAX | Maximum connection pool size | 10 |
Supports ADO.NET style connection strings:
server=tcp:hostname,port;database=dbname;user=username;password=secret;encrypt=true;trustservercertificate=false
This provider uses T-SQL stored procedures for all critical operations to ensure atomicity:
sp_fetch_orchestration_item- Fetch + lock orchestration turnsp_ack_orchestration_item- 9-step atomic commitsp_fetch_work_item- Fetch + lock activitysp_ack_worker- Delete + enqueue completion
See IMPLEMENTATION_PLAN.md for detailed architecture.
Run against Azure SQL:
export DATABASE_URL="server=tcp:myserver.database.windows.net,1433;database=mydb;user=myuser;password=mypass;encrypt=true"
cargo testMIT License - see LICENSE for details.