outbox_pattern_processor/
outbox_resources.rs1use crate::aws::{SnsClient, SqsClient};
2use sqlx::{Pool, Postgres};
3
4#[derive(Clone)]
5pub struct OutboxProcessorResources {
6 pub postgres_pool: Pool<Postgres>,
7 pub sqs_client: Option<SqsClient>,
8 pub sns_client: Option<SnsClient>,
9 pub http_timeout_in_millis: Option<u64>,
10 pub outbox_query_limit: Option<u32>,
11 pub outbox_execution_interval_in_seconds: Option<u64>,
12 pub delete_after_process_successfully: Option<bool>,
13 pub max_in_flight_interval_in_seconds: Option<u64>,
14 pub outbox_failure_limit: Option<u32>,
15 pub scheduled_clear_locked_partition: Option<bool>,
16 pub outbox_cleaner_execution_interval_in_seconds: Option<u64>,
17 pub delay_for_failure_attempt_in_seconds: Option<u64>,
18}
19
20impl OutboxProcessorResources {
21 pub fn new(
22 postgres_pool: Pool<Postgres>,
23 sqs_client: Option<SqsClient>,
24 sns_client: Option<SnsClient>,
25 ) -> Self {
26 Self {
27 postgres_pool,
28 sqs_client,
29 sns_client,
30 http_timeout_in_millis: None,
31 outbox_query_limit: None,
32 outbox_execution_interval_in_seconds: None,
33 delete_after_process_successfully: None,
34 max_in_flight_interval_in_seconds: None,
35 outbox_failure_limit: None,
36 scheduled_clear_locked_partition: None,
37 outbox_cleaner_execution_interval_in_seconds: None,
38 delay_for_failure_attempt_in_seconds: None,
39 }
40 }
41
42 pub fn with_http_timeout_in_millis(
43 self,
44 http_timeout: u64,
45 ) -> Self {
46 Self {
47 postgres_pool: self.postgres_pool,
48 sqs_client: self.sqs_client,
49 sns_client: self.sns_client,
50 http_timeout_in_millis: Some(http_timeout),
51 outbox_query_limit: self.outbox_query_limit,
52 outbox_execution_interval_in_seconds: self.outbox_execution_interval_in_seconds,
53 delete_after_process_successfully: self.delete_after_process_successfully,
54 max_in_flight_interval_in_seconds: self.max_in_flight_interval_in_seconds,
55 outbox_failure_limit: self.outbox_failure_limit,
56 scheduled_clear_locked_partition: self.scheduled_clear_locked_partition,
57 outbox_cleaner_execution_interval_in_seconds: None,
58 delay_for_failure_attempt_in_seconds: self.delay_for_failure_attempt_in_seconds,
59 }
60 }
61
62 pub fn with_outbox_query_limit(
63 self,
64 outbox_query_limit: u32,
65 ) -> Self {
66 Self {
67 postgres_pool: self.postgres_pool,
68 sqs_client: self.sqs_client,
69 sns_client: self.sns_client,
70 http_timeout_in_millis: self.http_timeout_in_millis,
71 outbox_query_limit: Some(outbox_query_limit),
72 outbox_execution_interval_in_seconds: self.outbox_execution_interval_in_seconds,
73 delete_after_process_successfully: self.delete_after_process_successfully,
74 max_in_flight_interval_in_seconds: self.max_in_flight_interval_in_seconds,
75 outbox_failure_limit: self.outbox_failure_limit,
76 scheduled_clear_locked_partition: self.scheduled_clear_locked_partition,
77 outbox_cleaner_execution_interval_in_seconds: None,
78 delay_for_failure_attempt_in_seconds: self.delay_for_failure_attempt_in_seconds,
79 }
80 }
81
82 pub fn with_outbox_execution_interval_in_seconds(
83 self,
84 outbox_execution_interval_in_seconds: u64,
85 ) -> Self {
86 Self {
87 postgres_pool: self.postgres_pool,
88 sqs_client: self.sqs_client,
89 sns_client: self.sns_client,
90 http_timeout_in_millis: self.http_timeout_in_millis,
91 outbox_query_limit: self.outbox_query_limit,
92 outbox_execution_interval_in_seconds: Some(outbox_execution_interval_in_seconds),
93 delete_after_process_successfully: self.delete_after_process_successfully,
94 max_in_flight_interval_in_seconds: self.max_in_flight_interval_in_seconds,
95 outbox_failure_limit: self.outbox_failure_limit,
96 scheduled_clear_locked_partition: self.scheduled_clear_locked_partition,
97 outbox_cleaner_execution_interval_in_seconds: None,
98 delay_for_failure_attempt_in_seconds: self.delay_for_failure_attempt_in_seconds,
99 }
100 }
101
102 pub fn with_delete_after_process_successfully(
103 self,
104 delete_after_process_successfully: bool,
105 ) -> Self {
106 Self {
107 postgres_pool: self.postgres_pool,
108 sqs_client: self.sqs_client,
109 sns_client: self.sns_client,
110 http_timeout_in_millis: self.http_timeout_in_millis,
111 outbox_query_limit: self.outbox_query_limit,
112 outbox_execution_interval_in_seconds: self.outbox_execution_interval_in_seconds,
113 delete_after_process_successfully: Some(delete_after_process_successfully),
114 max_in_flight_interval_in_seconds: self.max_in_flight_interval_in_seconds,
115 outbox_failure_limit: self.outbox_failure_limit,
116 scheduled_clear_locked_partition: self.scheduled_clear_locked_partition,
117 outbox_cleaner_execution_interval_in_seconds: None,
118 delay_for_failure_attempt_in_seconds: self.delay_for_failure_attempt_in_seconds,
119 }
120 }
121
122 pub fn with_max_in_flight_interval_in_seconds(
123 self,
124 max_in_flight_interval_in_seconds: u64,
125 ) -> Self {
126 Self {
127 postgres_pool: self.postgres_pool,
128 sqs_client: self.sqs_client,
129 sns_client: self.sns_client,
130 http_timeout_in_millis: self.http_timeout_in_millis,
131 outbox_query_limit: self.outbox_query_limit,
132 outbox_execution_interval_in_seconds: self.outbox_execution_interval_in_seconds,
133 delete_after_process_successfully: self.delete_after_process_successfully,
134 max_in_flight_interval_in_seconds: Some(max_in_flight_interval_in_seconds),
135 outbox_failure_limit: self.outbox_failure_limit,
136 scheduled_clear_locked_partition: self.scheduled_clear_locked_partition,
137 outbox_cleaner_execution_interval_in_seconds: None,
138 delay_for_failure_attempt_in_seconds: self.delay_for_failure_attempt_in_seconds,
139 }
140 }
141
142 pub fn with_outbox_failure_limit(
143 self,
144 outbox_failure_limit: u32,
145 ) -> Self {
146 Self {
147 postgres_pool: self.postgres_pool,
148 sqs_client: self.sqs_client,
149 sns_client: self.sns_client,
150 http_timeout_in_millis: self.http_timeout_in_millis,
151 outbox_query_limit: self.outbox_query_limit,
152 outbox_execution_interval_in_seconds: self.outbox_execution_interval_in_seconds,
153 delete_after_process_successfully: self.delete_after_process_successfully,
154 max_in_flight_interval_in_seconds: self.max_in_flight_interval_in_seconds,
155 outbox_failure_limit: Some(outbox_failure_limit),
156 scheduled_clear_locked_partition: self.scheduled_clear_locked_partition,
157 outbox_cleaner_execution_interval_in_seconds: None,
158 delay_for_failure_attempt_in_seconds: self.delay_for_failure_attempt_in_seconds,
159 }
160 }
161
162 pub fn with_scheduled_clear_locked_partition(
163 self,
164 scheduled_clear_locked_partition: bool,
165 ) -> Self {
166 Self {
167 postgres_pool: self.postgres_pool,
168 sqs_client: self.sqs_client,
169 sns_client: self.sns_client,
170 http_timeout_in_millis: self.http_timeout_in_millis,
171 outbox_query_limit: self.outbox_query_limit,
172 outbox_execution_interval_in_seconds: self.outbox_execution_interval_in_seconds,
173 delete_after_process_successfully: self.delete_after_process_successfully,
174 max_in_flight_interval_in_seconds: self.max_in_flight_interval_in_seconds,
175 outbox_failure_limit: self.outbox_failure_limit,
176 scheduled_clear_locked_partition: Some(scheduled_clear_locked_partition),
177 outbox_cleaner_execution_interval_in_seconds: None,
178 delay_for_failure_attempt_in_seconds: self.delay_for_failure_attempt_in_seconds,
179 }
180 }
181
182 pub fn with_outbox_cleaner_execution_interval_in_seconds(
183 self,
184 outbox_cleaner_execution_interval_in_seconds: u64,
185 ) -> Self {
186 Self {
187 postgres_pool: self.postgres_pool,
188 sqs_client: self.sqs_client,
189 sns_client: self.sns_client,
190 http_timeout_in_millis: self.http_timeout_in_millis,
191 outbox_query_limit: self.outbox_query_limit,
192 outbox_execution_interval_in_seconds: self.outbox_execution_interval_in_seconds,
193 delete_after_process_successfully: self.delete_after_process_successfully,
194 max_in_flight_interval_in_seconds: self.max_in_flight_interval_in_seconds,
195 outbox_failure_limit: self.outbox_failure_limit,
196 scheduled_clear_locked_partition: self.scheduled_clear_locked_partition,
197 outbox_cleaner_execution_interval_in_seconds: Some(outbox_cleaner_execution_interval_in_seconds),
198 delay_for_failure_attempt_in_seconds: self.delay_for_failure_attempt_in_seconds,
199 }
200 }
201
202 pub fn with_delay_for_failure_attempt_in_seconds(
203 self,
204 delay_for_failure_attempt_in_seconds: u64,
205 ) -> Self {
206 Self {
207 postgres_pool: self.postgres_pool,
208 sqs_client: self.sqs_client,
209 sns_client: self.sns_client,
210 http_timeout_in_millis: self.http_timeout_in_millis,
211 outbox_query_limit: self.outbox_query_limit,
212 outbox_execution_interval_in_seconds: self.outbox_execution_interval_in_seconds,
213 delete_after_process_successfully: self.delete_after_process_successfully,
214 max_in_flight_interval_in_seconds: self.max_in_flight_interval_in_seconds,
215 outbox_failure_limit: self.outbox_failure_limit,
216 scheduled_clear_locked_partition: self.scheduled_clear_locked_partition,
217 outbox_cleaner_execution_interval_in_seconds: self.outbox_cleaner_execution_interval_in_seconds,
218 delay_for_failure_attempt_in_seconds: Some(delay_for_failure_attempt_in_seconds),
219 }
220 }
221}