5个不稳定版本
使用旧的Rust 2015
0.4.2 | 2018年10月25日 |
---|---|
0.4.1 | 2018年10月24日 |
0.4.0 | 2018年10月14日 |
0.2.0 | 2018年9月30日 |
0.1.0 | 2018年9月16日 |
#811 in 异步
58KB
882 行
tokio-beanstalkd
此crate提供与Beanstalkd(一个简单的快速工作队列)交互的客户端。
关于Beanstalkd
Beanstalkd是一个简单快速的工作队列。它工作在TCP连接级别,考虑每个TCP连接单独。一个工作进程可以与Beanstalkd服务器有多个连接,每个连接都将被视为独立的。
该协议基于ASCII文本,但数据本身只是一个字节数据流。这意味着应用程序负责解释数据。
操作
此库可以作为应用程序和工作进程的客户端。应用程序会将作业放入队列,工作进程可以reserve
它们。一旦他们完成作业,他们必须delete
作业。这对于每个作业都是必需的,否则Beanstalkd不会从其内部数据结构中删除它。
如果一个工作进程无法在它的TTR(运行时间)内完成作业,那么它可以release
作业。应用程序可以使用using
方法将作业放入特定的管道中,而工作进程可以使用watch
仅从指定的管道中保留作业。
与Tokio的交互
此crate中的futures期望在tokio::Runtime
下运行。在常见情况下,您不能仅使用.wait()
来解析它们,而应使用tokio::run
或显式创建一个tokio::Runtime
,然后使用Runtime::block_on
。
一个简单的客户端示例可能看起来像这样
let mut rt = tokio::runtime::Runtime::new().unwrap();
let bean = rt.block_on(
Beanstalkd::connect(&"127.0.0.1:11300".parse().unwrap()).and_then(|bean| {
bean.put(0, 1, 100, &b"update:42"[..])
.inspect(|(_, response)| {
response.as_ref().unwrap();
})
.and_then(|(bean, _)| {
// Use a particular tube
bean.using("notifications")
}).and_then(|(bean, _)| bean.put(0, 1, 100, &b"notify:100"[..]))
}),
);
# }
而一个工作进程可能看起来像这样
let mut rt = tokio::runtime::Runtime::new().unwrap();
let bean = rt.block_on(
Beanstalkd::connect(&"127.0.0.1:11300".parse().unwrap()).and_then(|bean| {
bean.reserve()
.inspect(|(_, response)| {
// Do something with the response
}).and_then(|(bean, response)| {
// Delete the job once it is done
bean.delete(response.as_ref().unwrap().id)
})
}),
);
rt.shutdown_on_idle();
依赖关系
~3.5MB
~52K SLoC