Skip to main content

Listener

Struct Listener 

Source
pub struct Listener { /* private fields */ }
Expand description

Processes events from the event bus.

Listens for events, handles them with registered handlers, and manages retry logic with exponential backoff.

Implementations§

Source§

impl Listener

Source

pub fn new(pool: PgPool, registry: EventHandlerRegistry) -> Self

Creates a new listener with default configuration.

Default settings: 3 max attempts, 15 second base retry duration.

§Arguments
  • pool - Database connection pool
  • registry - Registry containing event handlers
Source

pub fn with_max_attempts(self, max_attempts: u16) -> Self

Sets maximum retry attempts before moving events to dead letter queue.

§Arguments
  • max_attempts - Maximum number of processing attempts (1-65535)
Source

pub fn with_retry_duration(self, retry_duration: Duration) -> Self

Sets base duration for exponential backoff retry delays.

Actual delay = base_duration * 2^(attempt - 1)

§Arguments
  • retry_duration - Base duration for retry calculations
Source§

impl Listener

Source

pub async fn listen(&mut self, tx: Option<Sender<Handled>>) -> Result<(), Error>

Starts the event listener loop.

Continuously polls for events using PostgreSQL LISTEN/NOTIFY with intelligent backoff. Processes events until the loop is stopped.

§Arguments
  • tx - Optional channel to send polling results to
§Errors

Returns database errors if connection or polling fails.

Source§

impl Listener

Source

pub async fn poll(&self, now: DateTime<Utc>) -> Result<Option<Uuid>, Error>

Polls for and processes a single event.

Prioritizes unacknowledged events over retry events. Handles the event with registered handlers and manages success/failure reporting.

§Arguments
  • now - Current timestamp for processing
§Returns

Returns the UUID of the processed event, or None if no events were available.

§Errors

Returns database errors if polling or transaction operations fail.

Source§

impl Listener

Source

pub async fn poll_retryable<'tx>( tx: &mut PgTransaction<'tx>, now: DateTime<Utc>, ) -> Result<Option<RawEvent>, Error>

Polls for retryable events that are ready for another processing attempt.

Uses FOR UPDATE SKIP LOCKED to atomically claim retryable events while maintaining FIFO ordering and avoiding contention between concurrent listeners.

§Arguments
  • tx - Database transaction to use for the operation
  • now - Current timestamp to check against retry deadlines
§Returns

Returns the next retryable event if one is available and ready, or None if no events are ready for retry.

§Errors

Returns database errors if the query or transaction operations fail.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,