#redis-queue #queue #redis #job-queue #worker

redyq

一个基于Redis的简单队列系统,用Rust编写,注重易用性和灵活性。

2个版本

0.1.1 2020年12月16日
0.1.0 2020年12月16日

#2050数据库接口

MIT 协议

9KB
131

Redyq

虽然这个项目规模较小,但任何形式的贡献都是受欢迎的,无论是想法还是代码。所以如果您想做出贡献,请随意使用您可用的任何GitHub功能——问题、pr等。

这是什么

Redyq是一个简单的Redis队列接口,旨在允许任何Rust服务轻松实现分布式队列集成。它还力求快速且可靠,因为这个软件不应成为应用程序的瓶颈,并且与任何队列一样,数据不应丢失。

入门

虽然还在起步阶段,但redyq提供了一套功能,可以提供队列、出队和处理作业的工具——以及一些有限的重试功能。遵循简单性的主题,redyq有两个关键的公开函数 create_queuecreate_worker

create_queue

此函数返回一个 Queue 对象,这是我们使用 add 函数向队列添加对象的关键对象。目前它仅连接到本地端口6379的Redis实例,但这将是可配置的。

目前,create_queue 的唯一参数是 queue_name 参数,正如您所期望的,是队列名称。此结构体上的函数 add 接受两个参数,作业名称 (job_name) 和作业消息数据 (message) - 注意 message 接受一个 serde_json::Value

示例

// This creates a queue
let queue: Queue = redyq::create_queue(String::from("example-queue").unwrap());

// This adds a job to the queue
queue.add(String::from("example-job", serde_json::from_str("{\"test_key\":\"test_value\"}").unwrap());

create_worker

此函数返回一个 Worker 对象,这是我们消费队列作业的关键对象。目前它仅连接到本地端口6379的Redis实例,但这将是可配置的。

目前,create_worker 的唯一参数是 queue_name,这是您希望消费的队列名称。《Worker》 有一个方法,即 start 方法,该方法接受一个处理器,该处理器针对队列中的每个作业运行,并返回 Result<(), Box<dyn Error> - 如果此结果为 Ok,则工作器将作业移动到完成队列,否则将其移动到失败队列,以便可以重试。

示例

// This creates a Worker
let worker: Worker = redyq::create_worker(String::from("example-queue")).unwrap();

// This starts the Worker with a provessor which just prints the job name
worker.start(|job: Job| {
    println!("{}", job.name);
    Ok(())
});

依赖关系

~3–4.5MB
~114K SLoC