pub struct SubscriptionDispatcher { /* private fields */ }Expand description
Ring 1 dispatcher that routes notifications to subscriber channels.
The dispatcher drains NotificationRings from Ring 0, resolves
NotificationRef values to ChangeEvent instances, and broadcasts
them to active subscriber channels via SubscriptionRegistry.
§Usage
ⓘ
let (shutdown_tx, shutdown_rx) = tokio::sync::watch::channel(false);
let dispatcher = SubscriptionDispatcher::new(
rings, registry, data_source, config, shutdown_rx,
);
let handle = tokio::spawn(dispatcher.run());
// ... later ...
shutdown_tx.send(true).unwrap();
handle.await.unwrap();Implementations§
Source§impl SubscriptionDispatcher
impl SubscriptionDispatcher
Sourcepub fn new(
notification_rings: Vec<Arc<NotificationRing>>,
registry: Arc<SubscriptionRegistry>,
data_source: Arc<dyn NotificationDataSource>,
config: DispatcherConfig,
shutdown: Receiver<bool>,
) -> Self
pub fn new( notification_rings: Vec<Arc<NotificationRing>>, registry: Arc<SubscriptionRegistry>, data_source: Arc<dyn NotificationDataSource>, config: DispatcherConfig, shutdown: Receiver<bool>, ) -> Self
Creates a new dispatcher.
Sourcepub async fn run(self)
pub async fn run(self)
Runs the dispatcher loop until shutdown.
Should be spawned as a tokio task.
Sourcepub fn drain_and_dispatch(
&self,
batch_buffer: &mut Vec<(u32, Vec<NotificationRef>)>,
) -> usize
pub fn drain_and_dispatch( &self, batch_buffer: &mut Vec<(u32, Vec<NotificationRef>)>, ) -> usize
Drains all notification rings and dispatches events.
Returns the total number of notifications drained.
Sourcepub fn metrics(&self) -> &Arc<DispatcherMetrics>
pub fn metrics(&self) -> &Arc<DispatcherMetrics>
Returns the dispatcher metrics.
Auto Trait Implementations§
impl Freeze for SubscriptionDispatcher
impl !RefUnwindSafe for SubscriptionDispatcher
impl Send for SubscriptionDispatcher
impl Sync for SubscriptionDispatcher
impl Unpin for SubscriptionDispatcher
impl UnsafeUnpin for SubscriptionDispatcher
impl !UnwindSafe for SubscriptionDispatcher
Blanket Implementations§
§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
type ArchivedMetadata = ()
The archived version of the pointer metadata for this type.
§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Converts some archived metadata to the pointer metadata for itself.
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<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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>
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 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>
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§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Returns the layout of the type.