pub struct SqliteOutboxWorkerBuilder { /* private fields */ }Expand description
Fluent builder for an OutboxWorker backed by SqliteOutboxStore.
See the module documentation for the single-worker concurrency model.
§Pool sizing and acquire timeout
SQLite uses a single-writer model. A pool size of 1–2 connections is
typical: the worker holds one connection per poll cycle while publishers
take the other. To prevent a stuck writer from blocking acquire()
indefinitely, set an acquire timeout on the pool:
use sqlx::sqlite::SqlitePoolOptions;
use std::time::Duration;
let pool = SqlitePoolOptions::new()
.max_connections(2)
// surface PoolTimeout instead of blocking indefinitely
.acquire_timeout(Duration::from_secs(5))
.connect("sqlite:outbox.db")
.await?;
let worker = SqliteOutboxWorkerBuilder::new(pool).build()?;When acquire_timeout expires, OutboxStore::acquire returns
OutboxError::PoolTimeout instead of hanging. The worker logs the
error and retries after OutboxWorkerConfig::poll_interval.
Implementations§
Source§impl SqliteOutboxWorkerBuilder
impl SqliteOutboxWorkerBuilder
Sourcepub fn new(pool: SqlitePool) -> Self
pub fn new(pool: SqlitePool) -> Self
Start a new builder for the given pool.
Sourcepub fn table_name(self, name: impl Into<String>) -> Self
pub fn table_name(self, name: impl Into<String>) -> Self
Override the outbox table name (default "audit_outbox").
Sourcepub fn dead_letter_table(self, name: impl Into<String>) -> Self
pub fn dead_letter_table(self, name: impl Into<String>) -> Self
Enable dead-letter persistence for poison messages.
Sourcepub fn register_handler<E, H>(self, handler: H) -> Self
pub fn register_handler<E, H>(self, handler: H) -> Self
Register a typed handler for the event type E.
Registering twice for the same event type silently replaces the previous handler.
Register a handler already shared behind an Arc.
Sourcepub fn poll_interval(self, d: Duration) -> Self
pub fn poll_interval(self, d: Duration) -> Self
Override the poll interval (default 100 ms).
Sourcepub fn batch_size(self, n: usize) -> Self
pub fn batch_size(self, n: usize) -> Self
Override the batch size per poll (default 10).
Sourcepub fn max_attempts(self, n: u32) -> Self
pub fn max_attempts(self, n: u32) -> Self
Override the maximum number of attempts per envelope (default 5).
Sourcepub fn retry_base_delay(self, d: Duration) -> Self
pub fn retry_base_delay(self, d: Duration) -> Self
Override the base delay for exponential backoff (default 1 s).
Sourcepub fn retry_max_delay(self, d: Duration) -> Self
pub fn retry_max_delay(self, d: Duration) -> Self
Override the maximum backoff delay (default 5 min).
Sourcepub fn jitter(self, enabled: bool) -> Self
pub fn jitter(self, enabled: bool) -> Self
Enable or disable full jitter on the backoff delay (default true).
Sourcepub fn dispatch_timeout(self, d: Duration) -> Self
pub fn dispatch_timeout(self, d: Duration) -> Self
Override the soft-lease duration for claimed envelopes (default 30 s).
SQLite has no FOR UPDATE SKIP LOCKED and therefore no
competing-consumer claim, so this store is meant for a single
worker (see the module documentation); running several workers
against one database can still double-dispatch. The lease is recorded on
claim alongside the attempt increment, but with a single writer it only
affects when a crashed-and-restarted worker re-picks an in-flight row.
Sourcepub fn build(self) -> Result<OutboxWorker<SqliteOutboxStore>, OutboxError>
pub fn build(self) -> Result<OutboxWorker<SqliteOutboxStore>, OutboxError>
Consume the builder and produce an OutboxWorker ready to spawn.
§Errors
Returns OutboxError::Internal if the configured table_name
is not a valid identifier.
Auto Trait Implementations§
impl !RefUnwindSafe for SqliteOutboxWorkerBuilder
impl !UnwindSafe for SqliteOutboxWorkerBuilder
impl Freeze for SqliteOutboxWorkerBuilder
impl Send for SqliteOutboxWorkerBuilder
impl Sync for SqliteOutboxWorkerBuilder
impl Unpin for SqliteOutboxWorkerBuilder
impl UnsafeUnpin for SqliteOutboxWorkerBuilder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more