pub struct MessageBus { /* private fields */ }Expand description
Message bus for inter-agent communication
Implementations§
Source§impl MessageBus
impl MessageBus
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a new message bus with bounded channels
Uses bounded channels to prevent memory exhaustion under load:
- Broadcast channel: 5000 messages (high capacity for burst traffic)
- All messages channel: 10000 messages (monitoring may fall behind)
Sourcepub fn register_agent(&self, agent_id: AgentId) -> Result<()>
pub fn register_agent(&self, agent_id: AgentId) -> Result<()>
Register an agent with bounded message channels
Each agent gets a bounded channel with DEFAULT_CHANNEL_CAPACITY to prevent any single slow agent from causing memory exhaustion.
Sourcepub fn unregister_agent(&self, agent_id: &AgentId) -> Result<()>
pub fn unregister_agent(&self, agent_id: &AgentId) -> Result<()>
Unregister an agent
Sourcepub fn send_message(
&self,
_from: AgentId,
to: AgentId,
message: Message,
) -> Result<()>
pub fn send_message( &self, _from: AgentId, to: AgentId, message: Message, ) -> Result<()>
Send a message to a specific agent (non-blocking)
Returns an error if the agent’s channel is full or the agent is not found. This prevents slow agents from blocking the sender.
Sourcepub fn broadcast(&self, _from: AgentId, message: BroadcastMessage) -> Result<()>
pub fn broadcast(&self, _from: AgentId, message: BroadcastMessage) -> Result<()>
Broadcast a message to all agents (non-blocking)
Returns an error if the broadcast channel is full.
Sourcepub fn get_receiver(&self, agent_id: &AgentId) -> Option<Receiver<Message>>
pub fn get_receiver(&self, agent_id: &AgentId) -> Option<Receiver<Message>>
Get receiver for an agent
Sourcepub fn subscribe_all(&self) -> Receiver<AgentMessage>
pub fn subscribe_all(&self) -> Receiver<AgentMessage>
Subscribe to all messages (for monitoring)
Sourcepub async fn publish_to_agent(
&self,
agent_id: &AgentId,
message: AgentMessage,
) -> Result<()>
pub async fn publish_to_agent( &self, agent_id: &AgentId, message: AgentMessage, ) -> Result<()>
Publish a message to a specific agent (non-blocking)
Returns an error if either the agent’s channel or the monitoring channel is full. This prevents slow consumers from causing memory exhaustion.
Sourcepub fn get_agent_receiver(
&self,
agent_id: &AgentId,
) -> Option<Receiver<AgentMessage>>
pub fn get_agent_receiver( &self, agent_id: &AgentId, ) -> Option<Receiver<AgentMessage>>
Get agent message receiver for a specific agent
Trait Implementations§
Auto Trait Implementations§
impl Freeze for MessageBus
impl !RefUnwindSafe for MessageBus
impl Send for MessageBus
impl Sync for MessageBus
impl Unpin for MessageBus
impl UnwindSafe for MessageBus
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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.