36 个版本
0.12.5 | 2024年2月18日 |
---|---|
0.12.1 | 2022年9月17日 |
0.12.0 | 2022年5月28日 |
0.11.1 | 2021年4月27日 |
0.8.8 | 2017年11月14日 |
#1333 in 异步
440 每月下载量
135KB
2.5K SLoC
faktory-rs
Faktory 工作员和作业生产者的 API 绑定。
此 crate 提供了无语言限制的 Faktory 工作服务器的 API 绑定。有关工作服务器的更详细系统概述、作业是什么以及它们是如何调度的信息,请参阅 Faktory 文档。
系统概述
从高层次来看,Faktory 有两个主要概念:作业和工作者。作业是客户端想要执行的工作,而工作者是最终执行这些作业的事物。客户端将作业排队,Faktory 将作业发送到可用的工作者(如果他们都忙,则等待),工作者执行作业,最终向 Faktory 报告作业已完成。
作业是自包含的,包括作业 类型(一个字符串)、作业的参数以及一些元数据。当作业被调度执行时,工作者会得到这些信息,并使用作业类型来确定如何执行作业。您可以认为作业执行是一个远程过程调用(RPC),其中作业类型是函数的名称,而作业参数是该函数的参数。
在这个 crate 中,您将找到用于提交作业(生产作业的客户端)和执行作业(消费作业的工作者)的绑定。前者可以通过创建 Producer
来完成,而后者使用 Consumer
完成。请参阅每个的文档以获取更多关于如何使用它们的详细信息。
加密连接(TLS)
要连接到使用 TLS 托管的 Faktory 服务器,请添加 tls
功能,并参阅 TlsStream
的文档,它可以用于 Producer::connect_with
和 Consumer::connect_with
。
示例
如果您想向 Faktory 提交 作业,请使用 Producer
。
use faktory::{Producer, Job};
let mut p = Producer::connect(None).unwrap();
p.enqueue(Job::new("foobar", vec!["z"])).unwrap();
如果您想从 Faktory 接收 作业,请使用 Consumer
。
use faktory::ConsumerBuilder;
use std::io;
let mut c = ConsumerBuilder::default();
c.register("foobar", |job| -> io::Result<()> {
println!("{:?}", job);
Ok(())
});
let mut c = c.connect(None).unwrap();
if let Err(e) = c.run(&["default"]) {
println!("worker failed: {}", e);
}
在本地运行测试套件
首先确保“Factory”服务已在您的机器上运行并接受连接。要启动它,请使用 Factory 容器并通过 docker 运行
docker run --rm -it -v faktory-data:/var/lib/faktory -p 127.0.0.1:7419:7419 -p 127.0.0.1:7420:7420 contribsys/faktory:latest /faktory -b :7419 -w :7420
之后运行测试
FAKTORY_URL=tcp://127.0.0.1:7419 cargo test --all-features --locked --all-targets
请注意,对于端到端测试,设置“FAKTORY_URL”环境变量是必需的,以避免跳过测试。
假设您已安装 make 并运行了 docker
守护程序,您可以使用 make faktory
命令启动一个 Faktory
容器。之后,运行 make test/e2e
来运行端到端测试套件。如果不再需要,可以使用 make faktory/kill
命令删除容器。
要为 crate 的 tls
功能运行端到端测试,请确保您已安装了 compose
docker 插件。运行 make faktory/tls
命令以在 ssl 终止的情况下在 NGINX
后启动 Faktory
,然后运行 make test/e2e/tls
。要删除容器,请运行 make faktory/tls/kill
。
依赖项
~4–15MB
~218K SLoC