bump version to 0.4.0 (#10)

* update readme

* remove note

* add CHANGELOG

* fix pr number
This commit is contained in:
Ayrat Badykov 2021-07-31 10:40:11 +03:00 committed by GitHub
parent 93e7e57d9a
commit 1aabb91206
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 35 additions and 18 deletions

View file

@ -1,5 +1,14 @@
# Changelog # Changelog
## 0.4.0 (2021-07-31)
### [#8](https://github.com/ayrat555/fang/pull/8):
- Maintain ConnectionPool for Worker Threads
- Rename Postgres into Queue
- Pass PgConnection into run function
- Add function to remove all tasks of the specified type
## 0.3.1 (2021-07-24) ## 0.3.1 (2021-07-24)
- Add periodic tasks - [#5](https://github.com/ayrat555/fang/pull/5), [#7](https://github.com/ayrat555/fang/pull/7) - Add periodic tasks - [#5](https://github.com/ayrat555/fang/pull/5), [#7](https://github.com/ayrat555/fang/pull/7)

View file

@ -1,6 +1,6 @@
[package] [package]
name = "fang" name = "fang"
version = "0.3.2" version = "0.4.0"
authors = ["Ayrat Badykov <ayratin555@gmail.com>"] authors = ["Ayrat Badykov <ayratin555@gmail.com>"]
description = "Background job processing library for Rust" description = "Background job processing library for Rust"
repository = "https://github.com/ayrat555/fang" repository = "https://github.com/ayrat555/fang"

View file

@ -6,8 +6,6 @@
Background job processing library for Rust. It uses Postgres DB as a task queue. Background job processing library for Rust. It uses Postgres DB as a task queue.
Note that the README follows the master branch, to see instructions for the latest published version, check [crates.io](https://crates.io/crates/fang).
## Installation ## Installation
@ -16,7 +14,8 @@ Note that the README follows the master branch, to see instructions for the late
```toml ```toml
[dependencies] [dependencies]
fang = "0.3.2" fang = "0.4.0"
serde = { version = "1.0", features = ["derive"] }
``` ```
2. Create `fang_tasks` table in the Postgres database. The migration can be found in [the migrations directory](https://github.com/ayrat555/fang/blob/master/migrations/2021-06-05-112912_create_fang_tasks/up.sql). 2. Create `fang_tasks` table in the Postgres database. The migration can be found in [the migrations directory](https://github.com/ayrat555/fang/blob/master/migrations/2021-06-05-112912_create_fang_tasks/up.sql).
@ -27,13 +26,12 @@ fang = "0.3.2"
Every job should implement `fang::Runnable` trait which is used by `fang` to execute it. Every job should implement `fang::Runnable` trait which is used by `fang` to execute it.
```rust ```rust
use fang::Error; use fang::Error;
use fang::Runnable; use fang::Runnable;
use fang::{Deserialize, Serialize};
use fang::typetag; use fang::typetag;
use fang::PgConnection;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize)]
struct Job { struct Job {
@ -42,7 +40,7 @@ struct Job {
#[typetag::serde] #[typetag::serde]
impl Runnable for Job { impl Runnable for Job {
fn run(&self) -> Result<(), Error> { fn run(&self, _connection: &PgConnection) -> Result<(), Error> {
println!("the number is {}", self.number); println!("the number is {}", self.number);
Ok(()) Ok(())
@ -52,31 +50,39 @@ impl Runnable for Job {
As you can see from the example above, the trait implementation has `#[typetag::serde]` attribute which is used to deserialize the job. As you can see from the example above, the trait implementation has `#[typetag::serde]` attribute which is used to deserialize the job.
The second parameter of the `run` function is diesel's PgConnection, You can re-use it to manipulate the job queue, for example, to add a new job during the current job's execution. Or you can just re-use it in your own queries if you're using diesel. If you don't need it, just ignore it.
### Enqueuing a job ### Enqueuing a job
To enqueue a job use `Postgres::enqueue_task` To enqueue a job use `Queue::enqueue_task`
```rust ```rust
use fang::Postgres; use fang::Queue;
... ...
Postgres::enqueue_task(&Job { number: 10 }).unwrap(); Queue::enqueue_task(&Job { number: 10 }).unwrap();
``` ```
The example above creates a new postgres connection on every call. If you want to reuse the same postgres connection to enqueue several jobs use Postgres struct instance: The example above creates a new postgres connection on every call. If you want to reuse the same postgres connection to enqueue several jobs use Postgres struct instance:
```rust ```rust
let postgres = Postgres::new(); let queue = Queue::new();
for id in &unsynced_feed_ids { for id in &unsynced_feed_ids {
postgres.push_task(&SyncFeedJob { feed_id: *id }).unwrap(); queue.push_task(&SyncFeedJob { feed_id: *id }).unwrap();
} }
``` ```
Or you can use `PgConnection` struct:
```rust
Queue::push_task_query(pg_connection, &new_job).unwrap();
```
### Starting workers ### Starting workers
Every worker runs in a separate thread. In case of panic, they are always restarted. Every worker runs in a separate thread. In case of panic, they are always restarted.
@ -90,6 +96,9 @@ use fang::WorkerPool;
WorkerPool::new(10).start(); WorkerPool::new(10).start();
``` ```
Checkout out a [simple example](https://github.com/ayrat555/fang/tree/master/fang_examples/simple_worker).
### Configuration ### Configuration
To configure workers, instead of `WorkerPool::new` which uses default values, use `WorkerPool.new_with_params`. It accepts two parameters - the number of workers and `WorkerParams` struct. To configure workers, instead of `WorkerPool::new` which uses default values, use `WorkerPool.new_with_params`. It accepts two parameters - the number of workers and `WorkerParams` struct.
@ -190,15 +199,15 @@ Usage example:
```rust ```rust
use fang::Scheduler; use fang::Scheduler;
use fang::Postgres; use fang::Queue;
let postgres = Postgres::new(); let queue = Queue::new();
postgres queue
.push_periodic_task(&SyncJob::default(), 120) .push_periodic_task(&SyncJob::default(), 120)
.unwrap(); .unwrap();
postgres queue
.push_periodic_task(&DeliverJob::default(), 60) .push_periodic_task(&DeliverJob::default(), 60)
.unwrap(); .unwrap();
@ -211,7 +220,6 @@ In the example above, `push_periodic_task` is used to save the specified task to
- Db check period in seconds - Db check period in seconds
- Acceptable error limit in seconds - |current_time - scheduled_time| < error - Acceptable error limit in seconds - |current_time - scheduled_time| < error
## Contributing ## Contributing
1. [Fork it!](https://github.com/ayrat555/fang/fork) 1. [Fork it!](https://github.com/ayrat555/fang/fork)