#队列 #对象 #集合 #最小 #维护 #时间 #消息

bin+lib timed-queue

维护一组对象以及它们应该返回的最小时间

5 个版本

0.2.3 2020 年 12 月 29 日
0.2.2 2020 年 12 月 29 日
0.2.1 2020 年 12 月 29 日
0.2.0 2020 年 12 月 28 日
0.1.0 2020 年 12 月 28 日

#12 in #维护

Download history 10/week @ 2024-03-28 8/week @ 2024-04-04 43/week @ 2024-05-02 44/week @ 2024-05-09 143/week @ 2024-05-16 126/week @ 2024-05-23 217/week @ 2024-05-30 118/week @ 2024-06-06 180/week @ 2024-06-13 140/week @ 2024-06-20 86/week @ 2024-06-27

555 每月下载量

MIT 许可证

6KB
120

文档位于 https://docs.rs/timed-queue .


lib.rs:

timed-queue 提供了 TimedQueue,一组对象及其应该返回的最小时间。

示例

想象一个 SMTP 服务器实现的“新消息”队列。对于新消息应立即尝试投递。对于投递失败的消息应在 30 分钟后重试。

 fn server_loop<I: IntoIterator<Item = MailMessage>>(tq: TimedQueue<MailMessage>, messages: I) {
     for m in messages {
         tq.enqueue(m, None);
     }
 }

 async fn delivery_loop(tq: TimedQueue<MailMessage>) {
     loop {
         let (msg, _) = tq.dequeue().await;
         if try_deliver(msg).await.is_err() {
             tq.enqueue(msg, Some(Instant::now() + Duration::from_secs(30 * 60)));
         }
     }
 }

 #[tokio::main]
 async fn main() {
     let tq = TimedQueue::new();
     let tq2 = tq.clone();
     std::thread::spawn(move || server_loop(tq, get_message_stream()));
     tokio::spawn(delivery_loop(tq2));
 }

依赖项

~2.4–8.5MB
~57K SLoC