more internal polish, resilient workers

This commit is contained in:
2026-02-09 18:32:34 -06:00
parent 588b319fec
commit e31ecb781b
62 changed files with 9872 additions and 584 deletions

View File

@@ -101,6 +101,10 @@ pub struct RabbitMqConfig {
/// Dead letter queue configuration
#[serde(default)]
pub dead_letter: DeadLetterConfig,
/// Worker queue message TTL in milliseconds (default 5 minutes)
#[serde(default = "default_worker_queue_ttl")]
pub worker_queue_ttl_ms: u64,
}
impl Default for RabbitMqConfig {
@@ -123,6 +127,7 @@ impl Default for RabbitMqConfig {
queues: QueuesConfig::default(),
exchanges: ExchangesConfig::default(),
dead_letter: DeadLetterConfig::default(),
worker_queue_ttl_ms: default_worker_queue_ttl(),
}
}
}
@@ -161,6 +166,11 @@ impl RabbitMqConfig {
Duration::from_secs(self.consumer_timeout_secs)
}
/// Get worker queue TTL as Duration
pub fn worker_queue_ttl(&self) -> Duration {
Duration::from_millis(self.worker_queue_ttl_ms)
}
/// Validate configuration
pub fn validate(&self) -> MqResult<()> {
if self.host.is_empty() {
@@ -491,6 +501,10 @@ fn default_dlq_ttl() -> u64 {
86400000 // 24 hours in milliseconds
}
fn default_worker_queue_ttl() -> u64 {
300000 // 5 minutes in milliseconds
}
#[cfg(test)]
mod tests {
use super::*;
@@ -542,6 +556,13 @@ mod tests {
assert_eq!(config.ttl().as_secs(), 86400); // 24 hours
}
#[test]
fn test_worker_queue_ttl() {
let config = RabbitMqConfig::default();
assert_eq!(config.worker_queue_ttl().as_secs(), 300); // 5 minutes
assert_eq!(config.worker_queue_ttl_ms, 300000);
}
#[test]
fn test_default_queues() {
let queues = QueuesConfig::default();