camel-config
Configuration management for the Rust Camel framework. Provides profile-based configuration with environment variable overrides, component defaults, and supervision settings.
Overview
camel-config manages application configuration through:
- Camel.toml files - Central configuration file
- Profile support - Environment-specific settings ([default], [production], etc.)
- Environment variables - Override any setting with
CAMEL_*variables - Route discovery - Automatic route file discovery via glob patterns
- Component defaults - Global defaults for HTTP, Kafka, Redis, SQL, File, Container components
- Supervision configuration - Retry and backoff settings for route supervision
Features
- 🎯 Profile-based configuration - Deep merge of profile settings with defaults
- 🌍 Environment variable overrides - Override any config value with
CAMEL_*prefix - 📁 Route discovery - Automatic route file discovery from glob patterns
- ⚙️ Component defaults - Set global defaults for all component endpoints
- 🔄 Hot reload support - Optional file watching for configuration changes
- 🔧 Supervision settings - Configure retry strategies and backoff policies
Camel.toml Format
Create a Camel.toml file in your project root:
[]
= ["routes/*.yaml"]
= false
= "info"
[]
= 1000
= 2.0
= 60000
= 5
# Component defaults - apply to all endpoints unless overridden by URI
[]
= 5000
= 30000
= 100
= false
[]
= "localhost:9092"
= "camel"
= 45000
[]
= "localhost"
= 6379
[]
= 5
= 1
= 300
[]
= 500
= 1000
= 30000
= 30000
[]
= "unix:///var/run/docker.sock"
# Observability
[]
= true
= 9090
[]
= "warn"
= false
[]
= "prod-kafka:9092"
= "camel-prod"
[]
= "prod-redis"
= 6379
[]
= "debug"
= true
[]
= true # Allow internal services in dev
Configuration Sections
[default]- Base configuration (required)[default.supervision]- Default supervision settings[default.components.<name>]- Component-specific global defaults[default.observability.<name>]- Observability settings (prometheus, otel, tracer)[<profile>]- Profile-specific overrides (merged with default)[<profile>.supervision]- Profile-specific supervision overrides[<profile>.components.<name>]- Profile-specific component overrides
Core Fields
| Field | Type | Description |
|---|---|---|
routes |
[String] |
Glob patterns for route files |
watch |
bool |
Enable hot reload on file changes |
runtime_journal_path |
String? |
Optional durability flag: when set, enables local runtime journal replay |
log_level |
String |
Logging level (trace/debug/info/warn/error) |
timeout_ms |
u64 |
Default operation timeout |
supervision.* |
- | Retry and backoff settings |
Component Defaults
Configure global defaults for each component. URI parameters always take precedence.
HTTP Component
[]
= 5000 # Connection timeout (default: 30000)
= 30000 # Response timeout (default: none)
= 100 # Max concurrent connections (default: 100)
= 10485760 # Max response body size, 10MB (default: 10MB)
= 2097152 # Max request body for server, 2MB (default: 2MB)
= false # Allow requests to private IPs (default: false)
Kafka Component
[]
= "localhost:9092" # Bootstrap servers (default: localhost:9092)
= "camel" # Consumer group ID (default: camel)
= 45000 # Consumer session timeout (default: 45000)
= 30000 # Producer request timeout (default: 30000)
= "latest" # Offset reset: earliest/latest/none (default: latest)
= "plaintext" # Security protocol (default: plaintext)
Redis Component
[]
= "localhost" # Redis host (default: localhost)
= 6379 # Redis port (default: 6379)
SQL Component
[]
= 5 # Max pool connections (default: 5)
= 1 # Min pool connections (default: 1)
= 300 # Idle connection timeout (default: 300)
= 1800 # Max connection lifetime (default: 1800)
File Component
[]
= 500 # Poll interval (default: 500)
= 1000 # Initial delay before first poll (default: 1000)
= 30000 # Read timeout (default: 30000)
= 30000 # Write timeout (default: 30000)
Container Component
[]
= "unix:///var/run/docker.sock" # Docker daemon socket (default)
Profile Selection
Set the active profile via the CAMEL_PROFILE environment variable:
# Use production profile
# Use development profile
If not set, defaults to the [default] profile only.
Environment Variables
Override any configuration value with environment variables using the CAMEL_ prefix:
# Override log level
# Override watch mode
# Optional: enable runtime durability/replay by configuring a journal path
# Override supervision settings
# Override routes
Environment variables take precedence over file configuration and are applied after profile merging.
Usage
Basic Usage
use CamelConfig;
// Load from Camel.toml in current directory
let config = from_file?;
// Access configuration values
println!;
println!;
With Profile
use CamelConfig;
// Load with profile (reads CAMEL_PROFILE env var or uses default)
let config = from_file_with_profile?;
// The profile is automatically merged with [default]
With Environment Variables
use CamelConfig;
// Load with full override support (profile + env vars)
let config = from_file_with_env?;
// Environment variables override all other sources
Configure CamelContext with Component Defaults
Use configure_context() to automatically apply component defaults to the CamelContext:
use CamelConfig;
use CamelContext;
use HttpComponent;
use KafkaComponent;
// Load configuration
let config = from_file_with_env?;
// Configure context with component defaults from Camel.toml
let mut ctx = new;
configure_context?;
// Register components - they will receive global defaults via context
let http_cfg = ctx..cloned;
ctx.register_component;
let kafka_cfg = ctx..cloned;
ctx.register_component;
Accessing Supervision Configuration
use CamelConfig;
let config = from_file?;
if let Some = &config.supervision
Accessing Component Defaults Programmatically
use CamelConfig;
let config = from_file?;
// Check if HTTP defaults are configured
if let Some = &config.components.http
// Check if Kafka defaults are configured
if let Some = &config.components.kafka
Installation
Add to your Cargo.toml:
[]
= "0.1"
Related Crates
- camel-core - Core framework and context
- camel-dsl - YAML route definitions and parsing
- camel-runtime - Route execution engine
Documentation
For more details, see the API documentation and the main Rust Camel project.