docs/advanced/adapters.mdx
Each iii module that needs persistence or distribution uses an adapter — a pluggable backend that implements a fixed interface. Swap adapters in iii-config.yaml without touching application code.
modules:
- class: modules::queue::QueueModule
config:
adapter:
class: modules::queue::RedisAdapter
config:
redis_url: ${REDIS_URL:redis://localhost:6379}
Every adapter entry has two fields:
class — the full adapter pathconfig — adapter-specific config (omit if not needed)| Adapter | Class | External dependency |
|---|---|---|
| Built-in | modules::queue::BuiltinQueueAdapter | None |
| Redis | modules::queue::RedisAdapter | Redis |
| RabbitMQ | modules::queue::RabbitMQAdapter | RabbitMQ |
modules::queue::BuiltinQueueAdapterDefault. In-process only with retries and DLQ — does not share messages across engine instances.
adapter:
class: modules::queue::BuiltinQueueAdapter
modules::queue::RedisAdapteradapter:
class: modules::queue::RedisAdapter
config:
redis_url: ${REDIS_URL:redis://localhost:6379}
modules::queue::RabbitMQAdapteradapter:
class: modules::queue::RabbitMQAdapter
config:
amqp_url: ${RABBITMQ_URL:amqp://localhost:5672}
max_attempts: 3
prefetch_count: 10
queue_mode: standard # standard | fifo
| Adapter | Class | External dependency |
|---|---|---|
| KV Store | modules::state::adapters::KvStore | None |
| Redis | modules::state::adapters::RedisAdapter | Redis |
| Bridge | modules::state::adapters::Bridge | Remote iii Engine |
modules::state::adapters::KvStoreDefault. Supports in-memory or file-based persistence.
adapter:
class: modules::state::adapters::KvStore
config:
store_method: file_based # in_memory | file_based
file_path: ./data/state
save_interval_ms: 5000
modules::state::adapters::RedisAdapteradapter:
class: modules::state::adapters::RedisAdapter
config:
redis_url: ${REDIS_URL:redis://localhost:6379}
modules::state::adapters::BridgeForwards state operations to a remote iii Engine.
adapter:
class: modules::state::adapters::Bridge
| Adapter | Class | External dependency |
|---|---|---|
| KV Store | modules::stream::adapters::KvStore | None |
| Redis | modules::stream::adapters::RedisAdapter | Redis |
modules::stream::adapters::KvStoreDefault. In-process only.
adapter:
class: modules::stream::adapters::KvStore
config:
store_method: file_based # in_memory | file_based
file_path: ./data/stream_store
save_interval_ms: 5000
modules::stream::adapters::RedisAdapteradapter:
class: modules::stream::adapters::RedisAdapter
config:
redis_url: ${REDIS_URL:redis://localhost:6379}
| Adapter | Class | External dependency |
|---|---|---|
| KV Cron | modules::cron::KvCronAdapter | None |
| Redis Cron | modules::cron::RedisCronAdapter | Redis |
modules::cron::KvCronAdapterDefault. Process-local locks — jobs may run on every instance in multi-instance deployments.
adapter:
class: modules::cron::KvCronAdapter
modules::cron::RedisCronAdapterDistributed locking via Redis — ensures each job runs only once across all instances.
adapter:
class: modules::cron::RedisCronAdapter
config:
redis_url: ${REDIS_URL:redis://localhost:6379}
| Adapter | Class | External dependency |
|---|---|---|
| Local | modules::pubsub::LocalAdapter | None |
| Redis | modules::pubsub::RedisAdapter | Redis |
modules::pubsub::LocalAdapterDefault. In-process broadcast — subscribers must be in the same engine process.
adapter:
class: modules::pubsub::LocalAdapter
modules::pubsub::RedisAdapteradapter:
class: modules::pubsub::RedisAdapter
config:
redis_url: ${REDIS_URL:redis://localhost:6379}
| Single instance | Multi-instance | |
|---|---|---|
| Queue | BuiltinQueueAdapter | RedisAdapter or RabbitMQAdapter |
| State | KvStore (file_based) | RedisAdapter |
| Stream | KvStore | RedisAdapter |
| Cron | KvCronAdapter | RedisCronAdapter |
| PubSub | LocalAdapter | RedisAdapter |
redis_url: ${REDIS_URL:redis://localhost:6379}