apalis_sql/
config.rs

1use std::time::Duration;
2
3use apalis_core::backend::{
4    poll_strategy::{BackoffConfig, IntervalStrategy, MultiStrategy, StrategyBuilder},
5    queue::Queue,
6};
7
8#[derive(Debug, Clone)]
9pub struct Config {
10    keep_alive: Duration,
11    buffer_size: usize,
12    poll_strategy: MultiStrategy,
13    reenqueue_orphaned_after: Duration,
14    queue: Queue,
15    ack: bool,
16}
17
18impl Default for Config {
19    fn default() -> Self {
20        Self {
21            keep_alive: Duration::from_secs(30),
22            buffer_size: 10,
23            poll_strategy: StrategyBuilder::new()
24                .apply(
25                    IntervalStrategy::new(Duration::from_millis(100))
26                        .with_backoff(BackoffConfig::default()),
27                )
28                .build(),
29            reenqueue_orphaned_after: Duration::from_secs(300), // 5 minutes
30            queue: Queue::from("default"),
31            ack: true,
32        }
33    }
34}
35
36impl Config {
37    /// Create a new config with a jobs queue
38    pub fn new(queue: &str) -> Self {
39        Config {
40            queue: Queue::from(queue),
41            ..Default::default()
42        }
43    }
44
45    /// Interval between database poll queries
46    ///
47    /// Defaults to 100ms
48    pub fn with_poll_interval(mut self, strategy: MultiStrategy) -> Self {
49        self.poll_strategy = strategy;
50        self
51    }
52
53    /// Interval between worker keep-alive database updates
54    ///
55    /// Defaults to 30s
56    pub fn set_keep_alive(mut self, keep_alive: Duration) -> Self {
57        self.keep_alive = keep_alive;
58        self
59    }
60
61    /// Buffer size to use when querying for jobs
62    ///
63    /// Defaults to 10
64    pub fn set_buffer_size(mut self, buffer_size: usize) -> Self {
65        self.buffer_size = buffer_size;
66        self
67    }
68
69    /// Gets a reference to the keep_alive duration.
70    pub fn keep_alive(&self) -> &Duration {
71        &self.keep_alive
72    }
73
74    /// Gets a mutable reference to the keep_alive duration.
75    pub fn keep_alive_mut(&mut self) -> &mut Duration {
76        &mut self.keep_alive
77    }
78
79    /// Gets the buffer size.
80    pub fn buffer_size(&self) -> usize {
81        self.buffer_size
82    }
83
84    /// Gets a reference to the poll_strategy.
85    pub fn poll_strategy(&self) -> &MultiStrategy {
86        &self.poll_strategy
87    }
88
89    /// Gets a mutable reference to the poll_strategy.
90    pub fn poll_strategy_mut(&mut self) -> &mut MultiStrategy {
91        &mut self.poll_strategy
92    }
93
94    /// Gets a reference to the queue.
95    pub fn queue(&self) -> &Queue {
96        &self.queue
97    }
98
99    /// Gets a mutable reference to the queue.
100    pub fn queue_mut(&mut self) -> &mut Queue {
101        &mut self.queue
102    }
103
104    /// Gets the reenqueue_orphaned_after duration.
105    pub fn reenqueue_orphaned_after(&self) -> Duration {
106        self.reenqueue_orphaned_after
107    }
108
109    /// Gets a mutable reference to the reenqueue_orphaned_after.
110    pub fn reenqueue_orphaned_after_mut(&mut self) -> &mut Duration {
111        &mut self.reenqueue_orphaned_after
112    }
113
114    /// Occasionally some workers die, or abandon jobs because of panics.
115    /// This is the time a task takes before its back to the queue
116    ///
117    /// Defaults to 5 minutes
118    pub fn set_reenqueue_orphaned_after(mut self, after: Duration) -> Self {
119        self.reenqueue_orphaned_after = after;
120        self
121    }
122
123    pub fn ack(&self) -> bool {
124        self.ack
125    }
126
127    pub fn set_ack(mut self, auto_ack: bool) -> Self {
128        self.ack = auto_ack;
129        self
130    }
131}