pub struct EventQueueManager { /* private fields */ }Expand description
Manages event queues for active tasks.
Each task can have at most one active writer. Multiple readers can
subscribe to the same writer concurrently (fan-out), enabling
SubscribeToTask to work even when another SSE stream is active.
Implementations§
Source§impl EventQueueManager
impl EventQueueManager
Sourcepub fn new() -> EventQueueManager
pub fn new() -> EventQueueManager
Creates a new, empty event queue manager with default capacity.
§Examples
use a2a_protocol_server::EventQueueManager;
let manager = EventQueueManager::new();Sourcepub fn with_capacity(capacity: usize) -> EventQueueManager
pub fn with_capacity(capacity: usize) -> EventQueueManager
Creates a new event queue manager with the specified channel capacity.
Sourcepub const fn with_write_timeout(self, timeout: Duration) -> EventQueueManager
pub const fn with_write_timeout(self, timeout: Duration) -> EventQueueManager
Sets the write timeout for event queue sends.
Retained for API compatibility. Broadcast-based queues do not block on writes, so this value is not actively used for backpressure.
Sourcepub const fn with_max_event_size(
self,
max_event_size: usize,
) -> EventQueueManager
pub const fn with_max_event_size( self, max_event_size: usize, ) -> EventQueueManager
Creates a new event queue manager with the specified maximum event size.
Events exceeding this size (in serialized bytes) will be rejected with an error to prevent OOM conditions.
Sourcepub fn with_metrics(self, metrics: Arc<dyn Metrics>) -> EventQueueManager
pub fn with_metrics(self, metrics: Arc<dyn Metrics>) -> EventQueueManager
Sets the metrics hook for reporting queue depth changes.
Sourcepub const fn with_max_concurrent_queues(self, max: usize) -> EventQueueManager
pub const fn with_max_concurrent_queues(self, max: usize) -> EventQueueManager
Sets the maximum number of concurrent event queues.
When the limit is reached, new queue creation will return an error
reader (None) to signal capacity exhaustion.
Sourcepub async fn get_or_create(
&self,
task_id: &TaskId,
) -> (Arc<InMemoryQueueWriter>, Option<InMemoryQueueReader>)
pub async fn get_or_create( &self, task_id: &TaskId, ) -> (Arc<InMemoryQueueWriter>, Option<InMemoryQueueReader>)
Returns the writer for the given task, creating a new queue if none exists.
If a queue already exists, the returned reader is None (callers
should use subscribe() to get additional readers
for existing queues). If a new queue is created, both the writer and
the first reader are returned.
If max_concurrent_queues is set and the limit is reached, returns
the writer with None reader (same as existing queue case).
Sourcepub async fn get_or_create_with_persistence(
&self,
task_id: &TaskId,
) -> (Arc<InMemoryQueueWriter>, Option<InMemoryQueueReader>, Option<Receiver<Result<StreamResponse, A2aError>>>)
pub async fn get_or_create_with_persistence( &self, task_id: &TaskId, ) -> (Arc<InMemoryQueueWriter>, Option<InMemoryQueueReader>, Option<Receiver<Result<StreamResponse, A2aError>>>)
Like get_or_create, but also creates a
dedicated persistence channel for the background event processor.
Returns (writer, Option<sse_reader>, Option<persistence_rx>).
The persistence receiver is only returned when a new queue is created
(not for existing queues). The persistence channel is independent of
the broadcast channel and is not affected by slow SSE consumers.
Sourcepub async fn subscribe(&self, task_id: &TaskId) -> Option<InMemoryQueueReader>
pub async fn subscribe(&self, task_id: &TaskId) -> Option<InMemoryQueueReader>
Creates a new reader for an existing task’s event queue.
Returns None if no queue exists for the given task. The returned
reader will receive all future events written to the queue.
This enables SubscribeToTask (resubscribe) to work even when
another SSE stream is already consuming events from the same queue.
Sourcepub async fn destroy(&self, task_id: &TaskId)
pub async fn destroy(&self, task_id: &TaskId)
Removes and drops the event queue for the given task.
Sourcepub async fn active_count(&self) -> usize
pub async fn active_count(&self) -> usize
Returns the number of active event queues.
Sourcepub async fn destroy_all(&self)
pub async fn destroy_all(&self)
Removes all event queues, causing all readers to see EOF.
Trait Implementations§
Source§impl Clone for EventQueueManager
impl Clone for EventQueueManager
Source§fn clone(&self) -> EventQueueManager
fn clone(&self) -> EventQueueManager
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for EventQueueManager
impl Debug for EventQueueManager
Source§impl Default for EventQueueManager
impl Default for EventQueueManager
Source§fn default() -> EventQueueManager
fn default() -> EventQueueManager
Auto Trait Implementations§
impl Freeze for EventQueueManager
impl !RefUnwindSafe for EventQueueManager
impl Send for EventQueueManager
impl Sync for EventQueueManager
impl Unpin for EventQueueManager
impl UnsafeUnpin for EventQueueManager
impl !UnwindSafe for EventQueueManager
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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> 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>
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>
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 moreSource§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>
T in a tonic::Request