#beanstalkd #tokio #async #api-bindings

tokio-beanstalkd

与Beanstalkd工作队列交互的异步客户端库

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 异步

MIT 许可证

58KB
882

tokio-beanstalkd

此crate提供与Beanstalkd(一个简单的快速工作队列)交互的客户端。

Build Status Crates.io Documentation

关于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