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 #维护
555 每月下载量
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