[−][src]Trait spartan_lib::core::dispatcher::SimpleDispatcher
Interface for working with database as message queue
Required methods
pub fn push(&mut self, message: M)
[src]
Push message to queue
use spartan_lib::core::dispatcher::SimpleDispatcher; use spartan_lib::core::db::VecDatabase; use spartan_lib::core::message::builder::MessageBuilder; let mut db = VecDatabase::default(); let message = MessageBuilder::default().body("Hello, world").compose().unwrap(); db.push(message);
pub fn peek(&self) -> Option<&M>
[src]
Get message from queue
use spartan_lib::core::dispatcher::SimpleDispatcher; use spartan_lib::core::db::VecDatabase; use spartan_lib::core::message::builder::MessageBuilder; use spartan_lib::core::payload::Identifiable; let mut db = VecDatabase::default(); let message = MessageBuilder::default().body("Hello, world").compose().unwrap(); db.push(message.clone()); assert_eq!(db.peek().unwrap().id(), message.id());
pub fn gc(&mut self)
[src]
Start GC cycle on queue
use spartan_lib::core::dispatcher::SimpleDispatcher; use spartan_lib::core::db::VecDatabase; use spartan_lib::core::message::builder::MessageBuilder; use spartan_lib::core::payload::{Identifiable, Status}; use std::thread::sleep; use std::time::Duration; let mut db = VecDatabase::default(); // We need two test messages here: one without timeout, and one with 1 second timeout // GC condition varies between messages, but here we'll use timeout as an example let message = MessageBuilder::default().body("Hello, world").compose().unwrap(); // Setting timeout to 0 and waiting 1-2 seconds turns message into garbage let mut garbage_message = MessageBuilder::default().body("I will be deleted").timeout(0).compose().unwrap(); // We are going to reserve the message before adding it do database garbage_message.reserve(); sleep(Duration::from_secs(2)); db.push(message.clone()); db.push(garbage_message); assert_eq!(db.size(), 2); db.gc(); assert_eq!(db.size(), 1); assert_eq!(db.peek().unwrap().id(), message.id());
pub fn size(&self) -> usize
[src]
Get queue size
use spartan_lib::core::dispatcher::SimpleDispatcher; use spartan_lib::core::db::VecDatabase; use spartan_lib::core::message::builder::MessageBuilder; let mut db = VecDatabase::default(); let message = MessageBuilder::default().body("Hello, world").compose().unwrap(); assert_eq!(db.size(), 0); db.push(message.clone()); assert_eq!(db.size(), 1);
pub fn clear(&mut self)
[src]
Clear all queue messages
use spartan_lib::core::dispatcher::SimpleDispatcher; use spartan_lib::core::db::VecDatabase; use spartan_lib::core::message::builder::MessageBuilder; let mut db = VecDatabase::default(); let message = MessageBuilder::default().body("Hello, world").compose().unwrap(); assert_eq!(db.size(), 0); db.push(message.clone()); assert_eq!(db.size(), 1); db.clear(); assert_eq!(db.size(), 0);
Implementors
impl<T, M> SimpleDispatcher<M> for T where
T: Database<M>,
M: Dispatchable,
[src]
T: Database<M>,
M: Dispatchable,