bump version to 0.4.0 (#10)
* update readme * remove note * add CHANGELOG * fix pr number
This commit is contained in:
parent
93e7e57d9a
commit
1aabb91206
3 changed files with 35 additions and 18 deletions
|
@ -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)
|
||||||
|
|
|
@ -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"
|
||||||
|
|
42
README.md
42
README.md
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue