pub struct SqliteOutboxStore { /* private fields */ }Expand description
SQLite implementation of OutboxStore backed by sqlx::SqlitePool.
See the module documentation for the single-worker concurrency model. Cheap to clone (the pool and the cached SQL strings are reference-counted).
Implementations§
Source§impl SqliteOutboxStore
impl SqliteOutboxStore
Sourcepub fn new(
pool: SqlitePool,
table_name: impl Into<String>,
) -> Result<Self, OutboxError>
pub fn new( pool: SqlitePool, table_name: impl Into<String>, ) -> Result<Self, OutboxError>
Build a store for the given pool and table.
§Errors
Returns OutboxError::Internal if table_name is not a valid
identifier matching ^[a-zA-Z_][a-zA-Z0-9_]*$.
Sourcepub fn pool(&self) -> &SqlitePool
pub fn pool(&self) -> &SqlitePool
Underlying pool.
Sourcepub fn table_name(&self) -> &str
pub fn table_name(&self) -> &str
Configured table name.
Sourcepub fn with_dead_letter(
self,
dlq_table: impl Into<String>,
) -> Result<Self, OutboxError>
pub fn with_dead_letter( self, dlq_table: impl Into<String>, ) -> Result<Self, OutboxError>
Activate dead-letter persistence for poison messages.
§Errors
Returns OutboxError::Internal if dlq_table is not a valid identifier.
Trait Implementations§
Source§impl Clone for SqliteOutboxStore
impl Clone for SqliteOutboxStore
Source§fn clone(&self) -> SqliteOutboxStore
fn clone(&self) -> SqliteOutboxStore
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for SqliteOutboxStore
impl Debug for SqliteOutboxStore
Source§impl OutboxStore for SqliteOutboxStore
impl OutboxStore for SqliteOutboxStore
Source§fn claim<'a, 'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
tx: &'life1 mut Self::Tx<'a>,
event_ids: &'life2 [Uuid],
lease_for: Duration,
) -> Pin<Box<dyn Future<Output = Result<(), OutboxError>> + Send + 'async_trait>>where
Self: 'async_trait,
'a: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn claim<'a, 'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
tx: &'life1 mut Self::Tx<'a>,
event_ids: &'life2 [Uuid],
lease_for: Duration,
) -> Pin<Box<dyn Future<Output = Result<(), OutboxError>> + Send + 'async_trait>>where
Self: 'async_trait,
'a: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Set the soft lease and consume one retry slot on the claimed batch.
SQLite has no FOR UPDATE SKIP LOCKED, so this does not provide a
competing-consumer claim: the store remains single-writer (see the
module documentation). The override exists so that attempts
is incremented at claim time on SQLite too. Without it, a worker that
crashed between claim and acknowledgement would never advance
attempts and would redeliver a poison row forever (#213).
Source§type Client = PoolConnection<Sqlite>
type Client = PoolConnection<Sqlite>
Source§type Tx<'tx> = Transaction<'tx, Sqlite>
type Tx<'tx> = Transaction<'tx, Sqlite>
Self::Client.Source§fn acquire<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Self::Client, OutboxError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn acquire<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Self::Client, OutboxError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn begin<'a, 'life0, 'async_trait>(
&'life0 self,
client: &'a mut Self::Client,
) -> Pin<Box<dyn Future<Output = Result<Self::Tx<'a>, OutboxError>> + Send + 'async_trait>>where
Self: 'async_trait,
'a: 'async_trait,
'life0: 'async_trait,
fn begin<'a, 'life0, 'async_trait>(
&'life0 self,
client: &'a mut Self::Client,
) -> Pin<Box<dyn Future<Output = Result<Self::Tx<'a>, OutboxError>> + Send + 'async_trait>>where
Self: 'async_trait,
'a: 'async_trait,
'life0: 'async_trait,
Source§fn poll<'a, 'life0, 'life1, 'async_trait>(
&'life0 self,
tx: &'life1 mut Self::Tx<'a>,
batch_size: usize,
max_attempts: u32,
) -> Pin<Box<dyn Future<Output = Result<Vec<OutboxEnvelope>, OutboxError>> + Send + 'async_trait>>where
Self: 'async_trait,
'a: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn poll<'a, 'life0, 'life1, 'async_trait>(
&'life0 self,
tx: &'life1 mut Self::Tx<'a>,
batch_size: usize,
max_attempts: u32,
) -> Pin<Box<dyn Future<Output = Result<Vec<OutboxEnvelope>, OutboxError>> + Send + 'async_trait>>where
Self: 'async_trait,
'a: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
FOR UPDATE SKIP LOCKED. Read moreSource§fn mark_delivered<'a, 'life0, 'life1, 'async_trait>(
&'life0 self,
tx: &'life1 mut Self::Tx<'a>,
event_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<(), OutboxError>> + Send + 'async_trait>>where
Self: 'async_trait,
'a: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn mark_delivered<'a, 'life0, 'life1, 'async_trait>(
&'life0 self,
tx: &'life1 mut Self::Tx<'a>,
event_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<(), OutboxError>> + Send + 'async_trait>>where
Self: 'async_trait,
'a: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn mark_failed<'a, 'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
tx: &'life1 mut Self::Tx<'a>,
event_id: Uuid,
error: &'life2 str,
retry_in: Duration,
) -> Pin<Box<dyn Future<Output = Result<(), OutboxError>> + Send + 'async_trait>>where
Self: 'async_trait,
'a: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn mark_failed<'a, 'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
tx: &'life1 mut Self::Tx<'a>,
event_id: Uuid,
error: &'life2 str,
retry_in: Duration,
) -> Pin<Box<dyn Future<Output = Result<(), OutboxError>> + Send + 'async_trait>>where
Self: 'async_trait,
'a: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn commit<'a, 'life0, 'async_trait>(
&'life0 self,
tx: Self::Tx<'a>,
) -> Pin<Box<dyn Future<Output = Result<(), OutboxError>> + Send + 'async_trait>>where
Self: 'async_trait,
'a: 'async_trait,
'life0: 'async_trait,
fn commit<'a, 'life0, 'async_trait>(
&'life0 self,
tx: Self::Tx<'a>,
) -> Pin<Box<dyn Future<Output = Result<(), OutboxError>> + Send + 'async_trait>>where
Self: 'async_trait,
'a: 'async_trait,
'life0: 'async_trait,
Source§fn mark_dead_lettered<'a, 'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
tx: &'life1 mut Self::Tx<'a>,
event_id: Uuid,
_error: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), OutboxError>> + Send + 'async_trait>>where
Self: 'async_trait,
'a: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn mark_dead_lettered<'a, 'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
tx: &'life1 mut Self::Tx<'a>,
event_id: Uuid,
_error: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), OutboxError>> + Send + 'async_trait>>where
Self: 'async_trait,
'a: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Auto Trait Implementations§
impl !RefUnwindSafe for SqliteOutboxStore
impl !UnwindSafe for SqliteOutboxStore
impl Freeze for SqliteOutboxStore
impl Send for SqliteOutboxStore
impl Sync for SqliteOutboxStore
impl Unpin for SqliteOutboxStore
impl UnsafeUnpin for SqliteOutboxStore
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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