Skip to content
Rust bindings for Faktory clients and workers
Branch: master
Clone or download
Latest commit 868e182 Dec 5, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
src rustfmt Nov 28, 2018
tests rustfmt Nov 28, 2018
.gitignore Very early first draft Oct 26, 2017
.travis.yml Add integration tests! Oct 29, 2018
Cargo.toml Set maintenance status Dec 4, 2018
LICENSE-APACHE Fix meta Oct 26, 2017
LICENSE-MIT Fix meta Oct 26, 2017 Bump old dependencies Oct 28, 2018
README.tpl Bump old dependencies Oct 28, 2018
appveyor.yml Also test on Windows Nov 12, 2017
clippy.toml Clean up and document Oct 26, 2017

faktory-rs Documentation Build Status Windows Build Status Codecov dependency status

API bindings for Faktory workers and job producers.

This crate provides API bindings for the language-agnostic Faktory work server. For a more detailed system overview of the work server, what jobs are, and how they are scheduled, see the Faktory docs.

System overview

At a high level, Faktory has two primary concepts: jobs and workers. Jobs are pieces of work that clients want to have executed, and workers are the things that eventually execute those jobs. A client enqueues a job, Faktory sends the job to an available worker (and waits if they're all busy), the worker executes the job, and eventually reports back to Faktory that the job has completed.

Jobs are self-contained, and consist of a job type (a string), arguments for the job, and bits and pieces of metadata. When a job is scheduled for execution, the worker is given this information, and uses the job type to figure out how to execute the job. You can think of job execution as a remote function call (or RPC) where the job type is the name of the function, and the job arguments are, perhaps unsuprisingly, the arguments to the function.

In this crate, you will find bindings both for submitting jobs (clients that produce jobs) and for executing jobs (workers that consume jobs). The former can be done by making a Producer, whereas the latter is done with a Consumer. See the documentation for each for more details on how to use them.

Encrypted connections (TLS)

To connect to a Faktory server hosted over TLS, add the tls feature, and see the documentation for TlsStream, which can be supplied to Producer::connect_with and Consumer::connect_with.


If you want to submit jobs to Faktory, use Producer.

use faktory::{Producer, Job};
let mut p = Producer::connect(None).unwrap();
p.enqueue(Job::new("foobar", vec!["z"])).unwrap();

If you want to accept jobs from Faktory, use Consumer.

use faktory::ConsumerBuilder;
use std::io;
let mut c = ConsumerBuilder::default();
c.register("foobar", |job| -> io::Result<()> {
    println!("{:?}", job);
let mut c = c.connect(None).unwrap();
if let Err(e) =["default"]) {
    println!("worker failed: {}", e);
You can’t perform that action at this time.