Skip to main content

NotifyBroker

Struct NotifyBroker 

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

Message broker that distributes PostgreSQL NOTIFY events to subscribers.

Implementations§

Source§

impl NotifyBroker

Source

pub fn new(pool: PgPool) -> Self

Create a new notification broker.

Source

pub fn with_capacity(pool: PgPool, capacity: usize) -> Self

Create a new notification broker with custom channel capacity.

Source

pub async fn start( &self, listen_channels: Vec<String>, ) -> Result<(), BrokerError>

Start listening for notifications on the given channels.

This spawns a background task that listens for PostgreSQL NOTIFY events and broadcasts them to all subscribers.

Source

pub async fn listen(&self, channels: Vec<String>) -> Result<(), BrokerError>

Listen on whichever of channels the broker is not listening on yet, over one new connection.

The channels already listened to are left alone, so a subscriber on one of them misses nothing while channels are added. On an error none of the new channels is recorded, and asking again retries them.

Source

pub async fn stop(&self)

Stop the broker, and every connection it is listening on.

Source

pub async fn subscribe( &self, channel: &str, ) -> Result<Pin<Box<dyn Stream<Item = PgNotification> + Send>>, BrokerError>

Subscribe to notifications for a specific channel.

Returns a stream of notifications for the given channel.

Source

pub async fn subscribe_or_create( &self, channel: &str, ) -> Pin<Box<dyn Stream<Item = PgNotification> + Send>>

Subscribe to a channel, creating it if it doesn’t exist.

Note: This only creates a broadcast channel. You must also call listen_channel to start receiving PostgreSQL notifications.

Source

pub async fn listen_channel(&self, channel: &str) -> Result<(), BrokerError>

Add a new channel to listen on dynamically.

Source

pub async fn is_running(&self) -> bool

Check if the broker is currently running.

Source

pub async fn channel_count(&self) -> usize

Get the number of active channels.

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<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

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> MaybeSend for T
where T: Send + ?Sized,

Source§

impl<T> MaybeSendSync for T
where T: Send + Sync + ?Sized,

Source§

impl<T> MaybeSync for T
where T: Sync + ?Sized,

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 = !

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

fn try_from(value: U) -> Result<T, !>

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