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 !UnwindSafe for SubscriptionDispatcher
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
The archived version of the pointer metadata for this type.
Source§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
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> LayoutRaw for T
impl<T> LayoutRaw for T
Source§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.
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Returns whether the given value has been niched. Read more
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
Writes data to
out indicating that a T is niched.