pub struct OutboxRelay {
pub store: Arc<dyn OutboxStore>,
pub publisher: Arc<dyn OutboxPublisher>,
pub poll: Duration,
pub batch: usize,
pub leader: Option<(DistributedLock, Arc<dyn DLockBackend>)>,
}Expand description
Background poll → publish → ack loop. At-least-once: an entry is acked
only after a successful publish, so a crash between the two replays it —
consumers must dedupe on idempotency_key.
Fields§
§store: Arc<dyn OutboxStore>§publisher: Arc<dyn OutboxPublisher>§poll: Duration§batch: usize§leader: Option<(DistributedLock, Arc<dyn DLockBackend>)>Leader election: when set, only the replica holding this lock drains the outbox each tick — others skip silently. Eliminates duplicate publishing across a fleet (consumers still dedupe on idempotency_key for the at-least-once edge cases).
Implementations§
Source§impl OutboxRelay
impl OutboxRelay
Auto Trait Implementations§
impl !RefUnwindSafe for OutboxRelay
impl !UnwindSafe for OutboxRelay
impl Freeze for OutboxRelay
impl Send for OutboxRelay
impl Sync for OutboxRelay
impl Unpin for OutboxRelay
impl UnsafeUnpin for OutboxRelay
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
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request