fang

Fang

Background job processing library for Rust.

Currently, it uses Postgres to store state. But in the future, more backends will be supported.

Installation

  1. Add this to your Cargo.toml

toml [dependencies] fang = "0.2" typetag = "0.1" serde = { version = "1.0", features = ["derive"] }

  1. Create fang_tasks table in the Postgres database. The migration can be found in the migrations directory.

Usage

Defining a job

Every job should implement fang::Runnable trait which is used by fang to execute it.

```rust use fang::Error; use fang::Runnable; use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
struct Job {
    pub number: u16,
}

#[typetag::serde]
impl Runnable for Job {
    fn run(&self) -> Result<(), Error> {
        println!("the number is {}", self.number);

        Ok(())
    }
}

```

As you can see from the example above, the trait implementation has #[typetag::serde] attribute which is used to deserialize the job.

Enqueuing a job

To enqueue a job use Postgres::enqueue_task

```rust use fang::Postgres;

...

Postgres::enqueue_task(&Job { number: 10 }).unwrap();

```

Starting workers

Every worker runs in a separate thread. In case of panic, they are always restarted.

Use WorkerPool to start workers. It accepts two parameters - the number of workers and the prefix for the worker thread name.

```rust use fang::WorkerPool;

WorkerPool::new(10, "sync".to_string()).start(); ```

Potential/future features

Contributing

  1. Fork it!
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Author

Ayrat Badykov (@ayrat555)