No description
4b1f537d19
* execute different types of task in separate workers * add more tests * pass reference * add CHANGELOG |
||
---|---|---|
.github | ||
migrations | ||
src | ||
.env | ||
.gitignore | ||
Cargo.toml | ||
CHANGELOG.md | ||
diesel.toml | ||
logo.png | ||
README.md |
Fang
Background job processing library for Rust.
Currently, it uses Postgres to store state. But in the future, more backends will be supported.
Installation
- Add this to your Cargo.toml
[dependencies]
fang = "0.2"
typetag = "0.1"
serde = { version = "1.0", features = ["derive"] }
- 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.
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
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.
use fang::WorkerPool;
WorkerPool::new(10, "sync".to_string()).start();
Potential/future features
- Extendable/new backends
- Workers for specific types of tasks. Currently, each worker execute all types of tasks
- Configurable db records retention. Currently, fang doesn't remove tasks from the db.
- Retries
- Scheduled tasks
Contributing
- Fork it!
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
Author
Ayrat Badykov (@ayrat555)